2016-04-15 19 views
18

値ではない私は、これはarray_column()のために期待される動作であると確信している:PHPのarray_column()を返すオブジェクトfalsyが

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()は値を返すためのものです。

何が最善の策ですか?

+1

は私のためのバグのように思えます。 – Rizier123

+0

PHPのバージョンは? –

+0

Windows/IIS上のPHP 7.0.0 ... –

答えて

6

それは確かにバグのように思える、と私はあなたがネストされた配列にオブジェクトの配列を変換し、それを丸める作業することができますreport it as such

をしたい:

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

PHPの内部構造についてよく分かりませんが、これはhttp://lxr.phpのためだと思います。 net/xref/PHP_7_0/ext/standard/array.c#3569ここで "空の" PHP値はスキップされます。私も間違っている可能性があります – Rizier123

+1

@ Rizier123 - それはnullと比較して任意の値を排除する効果があるかのように見えます(また、バグは有効なヌルとブールfalseに影響します)。 ;私は今週のPRを行うかもしれない –

+0

はい、それは私が* "空の" PHP値*を意味するものです:) *私はまた、結果に現れなかった空の文字列でそれをテストしました。残念ながら、私はそれを修正できる内部について十分に知りません。 – Rizier123

関連する問題