1

微妙だと思うPHPの動作に出くわしましたが、かなりクールです。でもどうしたらいいのかわからない…

$test=array('a'=>'c', 'b'=>'c');
unset($test['a']);
var_dump($test);

このプリント

array(1) { ["b"]=> string(1) "c" }

アレイが空になることを期待していました。結局のところ、$ test['a']は'c'と評価されるため、unset関数は'c'のみを認識しますが、それが削除したい最初の'c'値であることがわかりますか?

私の推測では、インターペッターは非常に賢く、与えられたパラメーター内の配列の内部を調べますが、それは純粋に推測です...

4

2 に答える 2

1

えーと、いや。unset関数ではなく、言語構造です。したがって、必ずしも同じ規則に従うとは限りません。

ただし、この場合、実際には参照渡しと同様に機能します。変数への参照を取得し、それを破棄します。

于 2013-01-17T04:45:20.417 に答える
0

実際に行っているのは、配列からキー「a」を破棄(設定解除)することです$test。したがって、そのキーが破棄された後、配列には「b」のみが存在します。

配列から「c」のすべての値を削除する場合は、array_diff()を使用します。

于 2013-01-17T04:46:36.197 に答える