Fonction récursive: Appel de fonction php lui-même
Je veux juste m'assurer que je le fais bien et ce n'allez pas créer de conflits.
J'ai une fonction qui s'appelle elle-même et a besoin de votre autorisation, si c'est OK ou pas pour le faire?
<?php
function determine($the_array){
foreach ($the_array as $key => $value) {
switch ($key) {
case 'in':
echo $value;
break;
case 'out':
echo $value;
break;
case 'level':
echo '<ul>';
determine($value);
echo '</ul>';
break;
}
}
}
C'est le tableau:
$the_array = array(
'in' => '<li>Simple IN</li>',
'out' => '<li>Simple OUT</li>',
'level' => array(
'in' => '<li>Simple IN 2</li>',
'out' => '<li>Simple OUT 2</li>',
'level' => array(
'in' => '<li>Simple IN 3</li>',
'out' => '<li>Simple OUT 3</li>'
),
),
);
Et voici le final init:
echo '<ul>';
determine($the_array);
echo '</ul>';
Le résultat est juste la façon dont je voulais être, et il fonctionne très bien, mais je ne sais pas si c'est une bonne pratique.
OriginalL'auteur Andrei Surdu | 2013-09-05
Vous devez vous connecter pour publier un commentaire.
Fonctions récursives sont OK - mais dangereux si vous n'êtes pas sûr que vous savez ce que vous faites. Si il y a une chance pour qu'une fonction finira dans une boucle récursive (où il continue d'appeler lui-même), vous serez soit le temps, de manquer de mémoire ou de provoquer une apocalypse zombie.
Pense que des appels récursifs comme un vraiment, vraiment forte de couteau dans les mains d'un chef expérimenté, c'est un match dans le ciel, dans les mains de l'lave-vaisselle, c'est la perte d'un doigt en attente de se produire.
PHP essaie de jouer à nice, et les limites d'une profondeur de récursivité à 100 par défaut (bien que cela puisse être changé), mais pour presque tous les cas, si votre profondeur de récursivité arrive à 100, l'accident a déjà eu lieu et PHP réagit en arrêtant supplémentaires piétons de circuler dans le trafic. 🙂
Oui et non, si vous ne savez pas ce que vous faites, en quelque sorte ils SONT une mauvaise pratique 🙂
La mauvaise pratique dans ce cas est de le faire est de ne pas savoir ce que vous faites, et non pas à l'aide d'une fonction récursive.
Ne suis pas en désaccord avec ça 🙂
Super réponse, +1 pour l'apocalypse zombie.
OriginalL'auteur Fluffeh
Fluffeh fourni suffisamment de répondre autant que les fonctions récursives sont concernés. Mais lors de l'utilisation de la récursivité avec de grands tableaux/objets/etc, vous devriez regarder l'optimisation de votre code, afin qu'il ne prend pas beaucoup de mémoire ou de puissance du PROCESSEUR pour exécuter.
Vous pouvez facilement optimiser votre code est plus propre, prendre moins de mémoire et d'être plus résistant aux données inattendues. Avis le & dans les arguments de la fonction de la liste (il élimine la création d'une copie d'un tableau à chaque fois une fonction imbriquée est appelé).
OriginalL'auteur Kleskowy
Je ne sais pas, si c'est une bonne solution, mais je l'utiliser pour appeler une fonction à partir de l'intérieur de lui-même:
OriginalL'auteur T.Todua
Je pense que si vous savez la profondeur du tableau, il est bon d'utiliser
OriginalL'auteur Salim