これは私を夢中にしています。再帰関数は、5.4.4と5.1.6(私が制御できないクライアントのホスティングサーバ)で異なって動作するようです。私は実際の例による場合を除いて、それを説明することはできません:PHPでPHPの再帰関数は、異なるバージョンで動作が異なりますか?
<?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);
?>
を出力
Homer is a child of Abe.
Bart is a child of Homer.
Lisa is a child of Homer.
Maggie is a child of Homer.
である5.4.4 PHPの中には、出力が
Homer is a child of Abe.
Bart is a child of Homer.
である5.1.6 I私は何も起きていないので、何が起きているのか説明できません(呼び出された関数が呼び出された関数が終了しても、呼び出された関数のパラメータが変更されます)。しかし、これをPHPサンドボックスでオンラインでテストしました。これら2つのバージョン問題は同じです。セットアップやホスティングサーバーの設定に固有の問題ではありません。
問題が確認されました:http://3v4l.org/n1mVc –
私は最初の赤い旗である配列として$ simpsonsを決して定義しません。 '$ simpsons = array();'を '<?php'の直後に追加すると何かに影響しますか? –
@ AndrewG.Johnson:悲しいことですが、それは有効なPHPコードです。 '$ simpsons [0] = array(" name "=>" Abe "、" parent "=> - 1);'は単に配列を自動作成します。 Docs:http://www.php.net/manual/en/language.types.array.php#language.types.array.syntax.modifying非常に落胆しますが、有効です。 –