【问题标题】:PHP array_column() not returning object falsy valuesPHP array_column() 不返回对象虚假值
【发布时间】:2016-04-15 08:50:19
【问题描述】:

我确定这是array_column() 的预期行为:

class myObj {
    public $prop;
    public function __construct(int $prop) {
        $this->prop = $prop;
    }
}

$objects = [
    new myObj(7),
    new myObj(3),
    new myObj(8),
    new myObj(0),
    new myObj(2),
    new myObj(6)
];

echo '<pre>';
print_r(array_column($objects, 'prop'));
echo '</pre>';

返回:

Array (
    [0] => 7
    [1] => 3
    [2] => 8
    [3] => 2
    [4] => 6
)

0 丢失。也许它在内部使用empty()..?

0false 可以是正常的有效对象属性值,而array_column() 用于返回值时,为什么它不会返回虚假值..?

什么是最好的解决方法..?

【问题讨论】:

  • 对我来说似乎是一个错误。
  • 哪个 PHP 版本?
  • Windows/IIS 上的 PHP 7.0.0...
  • 在 Ubuntu 的 PHP 7.0.4 上转载

标签: php php-7


【解决方案1】:

这确实看起来像一个错误,我会report it as such

您可以通过将对象数组转换为嵌套数组来解决它:

print_r(array_column(json_decode(json_encode($objects), true), 'prop'));

【讨论】:

  • 我不太了解 PHP 内部结构,但我认为这是因为:lxr.php.net/xref/PHP_7_0/ext/standard/array.c#3569 它跳过了“空”PHP 值。我也可能是错的
  • @Rizier123 - 看起来好像它会消除任何与 null 比较的值(并且该错误也会影响有效的 null 和布尔值 false)......最好简单地测试一下财产存在;这个周末我可能会做公关
  • 是的,这就是我对 "empty" PHP 值的意思 :) 我还用一个没有出现在结果中的空字符串对其进行了测试。可悲的是,我对可以修复它的内部结构知之甚少。
  • 另外,PHP 7 中的 array_column() 对象似乎还有其他问题:3v4l.org/tRnlr 它无法使用整数属性。无效属性名称相同:3v4l.org/CDvPC
  • 如何修理大象?一次一个错误:)
猜你喜欢
  • 2020-11-25
  • 2014-08-24
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多