2016-04-15 29 views
18

Tôi chắc chắn điều này dự kiến ​​hành vi cho array_column():PHP array_column() không trả về đối tượng falsy giá trị

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>'; 

Returns:

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

Các 0 là mất tích. Có lẽ nó sử dụng empty() nội bộ ..?

Tại sao nó không trả về giá trị giả khi 0false có thể là giá trị thuộc tính hợp lệ bình thường của đối tượng và array_column() có nghĩa là để trả về giá trị ..?

Công việc tốt nhất xung quanh .. là gì?

+1

Có vẻ như một lỗi cho tôi. – Rizier123

+0

phiên bản PHP nào? –

+0

PHP 7.0.0 trên Windows/IIS ... –

Trả lời

6

Nó chắc chắn có vẻ như một lỗi, và tôi muốn report it as such

Bạn có thể làm việc quanh nó bằng cách chuyển đổi các mảng đối tượng đến một mảng lồng nhau:

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

Tôi không biết nhiều về nội dung PHP, nhưng tôi nghĩ rằng đó là vì điều này: http: //lxr.php. net/xref/PHP_7_0/ext/standard/array.C# 3569 nơi nó bỏ qua các giá trị PHP "trống". Tôi cũng có thể sai – Rizier123

+1

@ Rizier123 - có vẻ như sẽ có tác dụng loại bỏ bất kỳ giá trị nào so sánh với null (và lỗi cũng ảnh hưởng đến các giá trị null hợp lệ và boolean sai) .... tốt hơn để kiểm tra nếu thuộc tính tồn tại ; Tôi có thể làm một PR cuối tuần này –

+0

Vâng, đó là những gì tôi có nghĩa là với * "trống" PHP giá trị * :) Tôi cũng đã thử nghiệm nó với một chuỗi rỗng mà không xuất hiện trong kết quả. Đáng buồn là tôi không biết đủ về những cái bên trong mà tôi có thể sửa nó. – Rizier123

Các vấn đề liên quan