ある配列を別の配列に割り当てると元の配列のポインタがリセットされるという問題について

1333 ワード

比較的使いやすい配列遍歴方法は2種類ある:1.foreach(; ; ;). 2.list()はeach()を組み合わせます.しかしeach()関数を運用する際には注意すべき問題がある.今日はプログラムを書いたが、結局死のサイクルに陥った.
コードは次のとおりです.
'apple','b'=>'banana');
while( list($k,$v) = each($fruit) ){
  echo "$k => $v ";
  $tmp=$fruit;
}
?>

なぜプログラムがデッドループに陥ったのか、phpマニュアルには、ある配列を別の配列に割り当てると元の配列ポインタがリセットされるため、上記の例では、ループ内部で$fruitを別の変数に割り当てると無限ループになると説明されています.
では、ポインタが変更されたプロセスを検証します.
'apple','b'=>'banana');
$tmp=$fruit;
echo current($tmp);//   apple
echo current($fruit);//   apple
var_dump($tmp);//    ,array('a'=>'apple','b'=>'banana')
echo "
"; each($fruit);// $tmp=$fruit; echo current($tmp);// banana echo current($fruit);// banana var_dump($tmp);// ,array('a'=>'apple','b'=>'banana') echo "
"; each($fruit);// $tmp=$fruit;// var_dump(current($fruit));//bool(false), echo current($tmp);// apple, var_dump($tmp);// ,array('a'=>'apple','b'=>'banana') ?>

関数の基本的な使い方は分かっていますが、その実現過程は分からないので、自分でも考えられない問題がよく出てきます.これから関数を使うときは、マニュアルをよく見なければなりません.