2016-04-15 5 views
18

को महत्व देता है मुझे यकीन है कि इस array_column() के लिए व्यवहार की उम्मीद है कर रहा हूँ:पीएचपी 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() का उपयोग करता है ..?

ऐसा क्यों है falsy मान नहीं होता जब 0 और false सामान्य वैध वस्तु संपत्ति मूल्यों हो सकता है, और array_column() मूल्यों लौटने के लिए है ..?

आसपास का सबसे अच्छा काम क्या है ..?

+1

मेरे लिए एक बग की तरह लगता है। – Rizier123

+0

कौन सा PHP संस्करण? –

+0

विंडोज़/आईआईएस पर PHP 7.0.0 ... –

उत्तर

6

यह निश्चित रूप से एक बग की तरह लगता है, और मैं एक नेस्टेड सरणी वस्तु सरणी में कनवर्ट करके report it as such

आप इसे दौर काम कर सकते हैं चाहते हैं:

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

में PHP 7.0.4 पर पुन: उत्पादित किया गया है, मुझे PHP आंतरिक के बारे में बहुत कुछ पता नहीं है, लेकिन मुझे लगता है कि यह इस वजह से है: http: //lxr.php। नेट/xref/PHP_7_0/ext/standard/array.C# 3569 जहां यह "खाली" PHP मानों को छोड़ देता है। मैं भी गलत हो सकता है – Rizier123

+1

@ Rizier123 - ऐसा लगता है कि यह शून्य के साथ तुलना करने वाले किसी भी मूल्य को समाप्त करने का प्रभाव होगा (और बग वैध नल और बूलियन झूठी को भी प्रभावित करता है) .... यह जांचने के लिए बेहतर है कि संपत्ति मौजूद है या नहीं ; मैं इस सप्ताहांत पीआर कर सकता हूं –

+0

हां, यही मेरा मतलब है * खाली "PHP" मूल्यों के साथ * :) मैंने इसे एक खाली स्ट्रिंग के साथ भी परीक्षण किया जो परिणाम में दिखाई नहीं दिया। अफसोस की बात है कि मैं उन आंतरिकों के बारे में पर्याप्त नहीं जानता जो मैं इसे ठीक कर सकता हूं। – Rizier123

संबंधित मुद्दे