【问题标题】:PHP unset BehaviorPHP 未设置行为
【发布时间】:2012-12-31 14:14:20
【问题描述】:

我遇到了一些 认为微妙但非常酷的 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' 值?

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

【问题讨论】:

  • 我没有按照您的预期遵循您的逻辑。您取消设置特定的数组键。为什么b=>c 会消失?
  • @Brad OP 期望 PHP 首先解释 $test['a'],它保存 'c' 的值,然后删除所有相同的值。
  • @Jack,哦,有道理!我现在知道了。当这样的东西有意义时,我想我已经研究 PHP 太久了。
  • @rink.attendant.6,我在发帖前确实看过这个问题(感谢 SO 在您开始输入时显示相关任务的有用功能)但没有人解释为什么 - 但下面的 Kolink现在说清楚了 - 当然,只需使用 pass by ref。

标签: php


【解决方案1】:

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

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

【讨论】:

  • 它确实需要 ref 并且更多原因导致其源中 php vars 的数据结构可能比所见的指针更多。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多