0
$array = array('1','3','20','10');
foreach ($array as $i=>$arr) {
   if ($i==0) unset($array[$i]);
}

質問:1つの要素を削除すると、このループの反復の順序が混乱しますか?現在の反復インデックスよりも小さい/等しい/大きいインデックスを持つ要素を削除するとどうなりますか?

元の配列を反復処理しながら変更する場合は、どうすればよいですか?

編集:配列が参照によって渡される場合は?

4

2 に答える 2

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」です。

しかし、これは良い考えではないと思います。あなたの質問が「これを避ける方法」であるならば、あなたがこれをしなければならない理由の例を提供してください

于 2012-08-30T11:17:25.850 に答える
0

foreach loop()を使用すると、PHPは配列のコピーを作成します。アレイを完全に吹き飛ばしても、何も起こらなかったため、反復は続行されます。ウィットに:

$array = array("a", "b", "c");

foreach($array as $element) {
    $array = null;
    echo "$element ";
}

出力:

a b c
于 2012-08-30T10:37:07.570 に答える