एक पैटर्न जो मैं अक्सर विकसित करते समय चलाता हूं, ऑब्जेक्ट्स के संग्रह से ऑब्जेक्ट्स के संग्रह से कॉलम/विशेषता मान एकत्र करने का प्रयास कर रहा है। उदाहरण के लिए:एक ऐरे में कॉलम मान एकत्रित करना
$ids = array();
foreach ($documents as $document) {
$ids[] = $document->name;
}
क्या मैं अकेला हूं जो इसमें चलता है? और क्या पीएचपी को कम लाइनों में हल करने का कोई तरीका है? मैंने देखा लेकिन कुछ भी नहीं मिला।
चूंकि मैं एक एमवीसी फ्रेमवर्क का उपयोग करता हूं, मेरे पास बेसयूल्ट क्लास तक पहुंच है जिसमें सामान्य कार्य होते हैं जो वास्तव में किसी भी विशिष्ट वर्ग में फिट नहीं होते हैं। एक समाधान एक सह कार्यकर्ता द्वारा प्रस्तावित है:
class BaseUtil
{
public static function collect($collection, $property) {
$values = array();
foreach ($collection as $item) {
$values[] = $item->{$property};
}
return $values;
}
}
तब मैं सिर्फ कर सकते हैं: भी जर्जर
$ids = BaseUtil::collect($documents, 'name');
नहीं। किसी और के पास कोई अन्य विचार है? और क्या मैं पागल हूं या ऐसा लगता है कि PHP को बहुत समय पहले हल होना चाहिए था?
यह मेरे उद्देश्यों के लिए काम नहीं करेगा क्योंकि मैं किसी भी संपत्ति/विशेषता के लिए इसे सामान्य बनाना चाहता हूं; सिर्फ नाम के लिए नहीं। ऐसा करने की कोशिश करते समय array_map() बहुत अधिक गन्दा हो जाता है और मैं इसे काम नहीं कर सका। –
@ जस्टिन वेलेंटीनी इसे गन्दा नहीं होना चाहिए: '$ name =" foobar "; array_map (फ़ंक्शन ($ obj) उपयोग ($ नाम) {वापसी $ obj -> {$ name};}, $ दस्तावेज़); ' – Andrea
इसके अलावा, 'create_function' का उपयोग करना एक बुरा विचार है। अब कोई भी PHP 5.2 का उपयोग नहीं कर रहा है - यदि वे हैं, तो यह एक गंभीर सुरक्षा समस्या है। इसके बजाय एक बंद का उपयोग करें। – Andrea