$array = array('1','3','20','10');
foreach ($array as $i=>$arr) {
if ($i==0) unset($array[$i]);
}
質問:1つの要素を削除すると、このループの反復の順序が混乱しますか?現在の反復インデックスよりも小さい/等しい/大きいインデックスを持つ要素を削除するとどうなりますか?
元の配列を反復処理しながら変更する場合は、どうすればよいですか?
編集:配列が参照によって渡される場合は?
特に提供されたコードに対して、一度
$array = array('1','3','20','10');
が宣言されると、キーがバインドされるため、
if($i==0) unset($array[$i]);
設定が解除されるだけ'1'
で、
array(2) {
[1]=>
string(1) "2"
[2]=>
string(1) "3"
}
@cleongが言ったように、PHPは反復時に配列のコピーを作成するようです。
$arr=array("1","2","3");
foreach($arr as $idx=>$val)
{
if(isset($arr[1])) unset($arr[1]);
echo $val."\n";
}
var_dump($arr);
戻ります
1
2
3
array(2) {
[0]=>
string(1) "1"
[2]=>
string(1) "3"
}
unset
したがって、エラーが発生しない限り(たとえば、すでに設定されていない変数の設定を解除する)、反復内の要素の設定を解除しても「OK」です。
しかし、これは良い考えではないと思います。あなたの質問が「これを避ける方法」であるならば、あなたがこれをしなければならない理由の例を提供してください。
foreach loop()を使用すると、PHPは配列のコピーを作成します。アレイを完全に吹き飛ばしても、何も起こらなかったため、反復は続行されます。ウィットに:
$array = array("a", "b", "c");
foreach($array as $element) {
$array = null;
echo "$element ";
}
出力:
a b c