Questo mi sta facendo impazzire. Le funzioni ricorsive sembrano funzionare diversamente in 5.4.4 e 5.1.6 (server di hosting di un client su cui non ho alcun controllo). Non posso davvero spiegare se non con esempio:Le funzioni ricorsive PHP funzionano in modo diverso nelle diverse versioni?
<?php
$simpsons[0] = array("name"=>"Abe","parent"=>-1);
$simpsons[1] = array("name"=>"Homer","parent"=>0); // Homer's parent is Abe
$simpsons[2] = array("name"=>"Bart","parent"=>1); // Bart's parent is Homer
$simpsons[3] = array("name"=>"Lisa","parent"=>1); // Lisa's parent is Homer
$simpsons[4] = array("name"=>"Maggie","parent"=>1); // Maggie's parent is Homer
function get_children($parent) {
global $simpsons;
foreach ($simpsons as $index=>$onesimpson) {
if ($onesimpson["parent"]==$parent) {
echo "$onesimpson[name] is a child of ".$simpsons[$parent]["name"].".<br />\n";
get_children($index);
}
}
}
get_children(0);
?>
Sulla PHP 5.4.4 l'uscita è
Homer is a child of Abe.
Bart is a child of Homer.
Lisa is a child of Homer.
Maggie is a child of Homer.
mentre sul PHP 5.1.6 l'uscita è
Homer is a child of Abe.
Bart is a child of Homer.
I Non sono bravo con la terminologia quindi non posso spiegare cosa sta succedendo (è come nella 5.1.6 la funzione chiamata cambia il parametro della funzione chiamante anche quando la funzione chiamata termina), ma ho provato questo in sandbox PHP online su questi due versi Ons e il problema è identico - non è specifico per la mia configurazione o l'installazione del server di hosting.
Problema confermato: http://3v4l.org/n1mVc –
Non si definisce mai $ simpson come un array che è la prima bandiera rossa per me. Se si aggiunge '$ simpsons = array();' immediatamente dopo ' Php' influisce su qualcosa? –
@ AndrewG.Johnson: Per quanto mi rattrista, è un codice PHP valido. '$ simpsons [0] = array (" name "=>" Abe "," parent "=> - 1);' creerà automaticamente una matrice. Documenti: http://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying È altamente sconsigliato, ma è valido. –