मेरे पास PHP में एक बहुआयामी सरणी है, जहां बाहरी सरणी में कई हजार आइटम हैं और प्रत्येक आइटम अंदर एक सरणी है जो "key1", "key2" मानों के साथ है और "गिनती":PHP बहुआयामी सरणी: दो मानों के संगतता के साथ सभी कुंजियों को प्रतिस्थापित करें
myExistingArray (size=99999 VERY BIG)
public 0 =>
array (size=3)
'key1' => string '15504'
'key2' => string '20'
'count' => string '1'
public 1 =>
array (size=3)
'key1' => string '15508' (length=5)
'key2' => string '20' (length=2)
'count' => string '2' (length=1)
public 2 =>
array (size=3)
'key1' => string '15510' (length=5)
'key2' => string '20' (length=2)
'count' => string '5' (length=1)
....many more similar items
मैं एक बहुत ही सरल सरणी, जहां "कुंजी 1" और से पूर्व मूल्यों "कुंजी" एक नया महत्वपूर्ण यह है कि corressponding के लिए अंक होने के लिए concatenated रहे हैं "गिनती" में इस बदलना चाहते हैं मूल्य जैसे:
myNewArray (size=99999 VERY BIG)
<key1>_<key2> => <count>
15504_20 => string '1' (length=1)
15508_20 => string '2' (length=1)
15510_20 => string '5' (length=1)
प्रदर्शन मेरे लिए बहुत महत्वपूर्ण है क्योंकि बाहरी सरणी में कई हजार वस्तुएं हैं। PHP में एक तेज विधि है? केवल एक चीज मुझे मिल गया एक सरल यात्रा थी, लेकिन यह मेरे लिए धीमा करने के लिए लगता है:
// works but I am looking for a faster version
$myNewArray = array();
foreach ($myExistingArray as $item) {
$myNewArray [$item["key1"]."_".$item["key1"]]=$item["count"];
}
संपादित करें/मूल समस्या
कुछ लोगों को हक ने कहा कि मेरे वर्तमान समाधान में हे (एन) पहले से ही है और उल्लेख किया कि इस गति को गति देने के लिए PHP में कोई अंतर्निहित फ़ंक्शन नहीं है।
मुझे एक mysql डेटाबेस क्वेरी से "myExistingArray" मिलता है। मैं मूल रूप से नौकरी की वस्तुएं रखता हूं और उन्हें अपनी स्थिति और उनके event_id द्वारा समूहित करना चाहता हूं। यह करने के लिए क्वेरी समान:
select count(job.id) as count, job.status as key1, job.event_id as key2
from job
group by job.status, job.event_id
मैं इतना है कि बाद में मैं आसानी से नौकरियों की गिनती एक निश्चित घटना के लिए एक निश्चित स्थिति के साथ उपयोग कर सकते हैं कुंजी को पुनर्व्यवस्थित करना चाहते हैं।
array_column –
का उपयोग करने का प्रयास करें "बहुत धीमी" क्या है? आपका सुझाव ओ (एन) लगता है जो इस तरह की चीज़ के लिए जितना तेज़ हो जाता है। – Erik
डेटा कहां से शुरू हो रहा है? हो सकता है कि आप बदल सकें कि डेटा कैसे संग्रहीत किया जाता है, या यह कैसे प्रदान किया जाता है, और इस तरह से डेटा को संसाधित करने से बचने से बचें। वैसे भी, यदि यह असंभव है, तो आपके पास लूप जितना आसान हो उतना आसान होता है, जो अक्सर (इस मामले सहित) का मतलब है कि यह चीजों को करने का सबसे तेज़ तरीका है। सभी डेटा को इटरेट करना और एक नई सरणी बनाना _always_ _O (n) _ ऑपरेशन होगा, क्योंकि *** प्रत्येक तत्व को संसाधित करने की आवश्यकता है *** –