समाधान आपके द्वारा उपयोग किए जा रहे PHP संस्करण पर निर्भर करता है। कम से कम 2 समाधान हैं:
पहले (नए PHP संस्करण)
जैसा कि @JosepAlsina ने कहा कि सबसे अच्छा और सबसे छोटा समाधान पहले उपयोग करना है array_column:
$catIds = array_column($objects, 'id');
सूचना: सवाल में प्रयुक्त होने arrayवाले
एसर को पुनरावृत्त \stdClassकरने के लिए, यह केवल PHP संस्करणों के साथ संभव है >= 7.0। लेकिन जब एक arrayयुक्त arrays का उपयोग कर आप PHP के बाद से ही कर सकते हैं >= 5.5।
दूसरा (पुराने PHP संस्करण)
@Greg ने पुराने PHP संस्करणों में कहा है कि यह करना संभव है:
$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);
लेकिन सावधान रहें: नए PHP संस्करणों में , s >= 5.3.0का उपयोग करना बेहतर है Closure, जैसे निम्नलिखित:
$catIds = array_map(function($o) { return $o->id; }, $objects);
अंतर
पहला समाधान एक नया फ़ंक्शन बनाता है और इसे आपकी रैम में डालता है। कचरा संग्रहकर्ता किसी कारण से पहले से निर्मित और पहले से ही फंक्शन इंस्टेंस को मेमोरी से डिलीट नहीं करता है। और इस तथ्य की परवाह किए बिना, कि बनाए गए फ़ंक्शन उदाहरण को फिर से कभी नहीं बुलाया जा सकता है, क्योंकि हमारे पास इसके लिए कोई संकेतक नहीं है। और अगली बार जब यह कोड कहा जाता है, तो वही फ़ंक्शन फिर से बनाया जाएगा। यह व्यवहार आपकी याददाश्त को धीरे-धीरे भर देता है ...
उनकी तुलना करने के लिए मेमोरी आउटपुट के साथ दोनों उदाहरण:
खराब
while (true)
{
$objects = array_map(create_function('$o', 'return $o->id;'), $objects);
echo memory_get_usage() . "\n";
sleep(1);
}
// the output
4235616
4236600
4237560
4238520
...
अच्छा
while (true)
{
$objects = array_map(function($o) { return $o->id; }, $objects);
echo memory_get_usage() . "\n";
sleep(1);
}
// the output
4235136
4235168
4235168
4235168
...
इस पर भी यहां चर्चा हो सकती है
स्मृति रिसाव?! क्या 'array_map' के भीतर 'create_function' का उपयोग करते समय कचरा कलेक्टर सही कर रहा है?