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' 值?

我的猜测是interpeter非常聪明,并且在给它的参数内查看数组内部 - 但这纯粹是猜想......

4

2 回答 2

1

嗯,没有。unset不是函数,它是一种语言结构。因此,它不一定遵循相同的规则。

然而,在这种情况下,它实际上类似于传递引用。它获取对变量的引用,并销毁它。

于 2013-01-17T04:45:20.417 回答
0

您实际上正在做的是从数组中销毁(取消设置)键“a” $test。所以在该键被销毁后,数组中只存在“b”。

如果您想从数组中删除所有 'c' 的值,请使用array_diff()

于 2013-01-17T04:46:36.197 回答