0

PHPを使用して配列を操作すると、問題が発生しました。

これはどのように作動しますか?

理由を知りたい!

そして、「unset」を使用しない場合、このコードは機能することがわかりました。そして、私はグーグルしますが、答えが得られません!だからお願いします!

PHPでPassingbyReferenceを使用すると、失敗します。

ありがとう!

<?php

$arr = array('a','b','c','d',array(1,2,3,4,5));

var_dump($arr);
foreach($arr as &$value){
    if($value == 'c'){
        unset($value);
    }
    if(is_array($value)){
        foreach ($value as $key => &$v) {
            if($v == 2){
                unset($v);
            }
        }
    }
}
var_dump($arr);

?>

これは結果です:

array (size=5)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => 
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5
array (size=5)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)
  4 => &
    array (size=5)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => &int 5
4

1 に答える 1

4

unset繰り返し処理している配列からアイテムを削除する場合は、値ではなく配列のキーが必要です。

foreach($arr as $key => $value){
    if (...) {
        unset($arr[$key]);
    }
}

&$value特定の反復で、 に格納されている同じ変数への別の参照があるため、現在のソリューションは期待どおりに機能しません$arr。したがって、元の変数ではなく、ローカル変数の設定を解除しています。

于 2013-03-12T00:48:32.337 に答える