2012-05-03 28 views
8

मैं एक सरणी है में एक स्तर ऊपर बदलाव ऐसे हीसभी सरणी तत्वों एक बहुआयामी सरणी

$arr = array(
    array(
     'test1' => 'testing1' 
    ), 
    array(
     'test2' => array(
     1 =>'testing2 
    ) 
); 

लग सकता है और मैं इसे

$newArr = array(
    'test1' => 'testing1', 
    'test2' => array(
     1 => 'testing2' 
    ) 
); 

में बदलने के लिए तो मैं शिफ्ट करने के लिए कोशिश कर रहे हैं चाहते हैं सभी सरणी तत्व एक स्तर ऊपर।

eidt:

public function arrayMerge($arr1, $arr2) 
      { 
       foreach($arr2 as $key => $value) { 

        $condition = (array_key_exists($key, $arr1) && is_array($value)); 
        $arr1[$key] = ($condition ? $this->arrayMerge($arr1[$key], $arr2[$key]) : $value); 
       } 

       return $arr1; 
      } 
+0

मुझे वही काम करने की ज़रूरत है, हालांकि मुझे लगता है कि समस्या को हल करने के लिए बस '$ newArray = $ oldArray [0]' किया गया था। क्या यह आपके मामले में काम नहीं करेगा? – vertigoelectric

उत्तर

10

प्रयास करें

$arr = array(
     array('test1' => 'testing1'), 
     array('test2' => array(1 =>'testing2')) 
); 

$new = array(); 
foreach($arr as $value) { 
    $new += $value; 
} 
var_dump($new); 

आउटपुट

array 
    'test1' => string 'testing1' (length=8) 
    'test2' => 
    array 
     1 => string 'testing2' (length=8) 
+0

धन्यवाद से काफी तेज़ है, यह मेरी arrayMerge() विधि के साथ संयोजन में सही काम करता है! – Eli

+1

क्या कोई ** अंतर्निहित फ़ंक्शन ** ऐसा करने के लिए ** ** बिना 'foreach' का उपयोग कर रहा है? PHP ** – Neocortex

+0

में बहुआयामी सरणी को एकल आयामी में परिवर्तित करना आसान होगा ** मैं इस तरह के एक अंतर्निर्मित फ़ंक्शन को लंबे समय से खोज रहा था क्योंकि हम सरणी से डेटा निकालने के लिए नेस्टेड 3 से 4 फ़ोरैच लूप का उपयोग नहीं कर सकते हैं। अगर कोई फोरैच esp का उपयोग किए बिना आ सकता है: फ़ंक्शन में निर्मित के साथ मैं उसे PHP के ताज के रूप में बुलाऊंगा। – Neocortex

16

यह कुछ हद तक तुच्छ, कई मायनों संभव हो रहे हैं रहा है:

यह मेरी विधि है कि 2 सरणी एक साथ जोड़ती है।

array union operator (+)­Docs सरणी के अंदर सभी सरणियों के संघ बनाने का उपयोग कर उदाहरण के लिए:

$newArr = array(); 
foreach ($arr as $subarray) 
    $newArr += $subarray; 

या एक बार में सभी subarrays साथ array_merge­Docs का उपयोग करके call_user_func_array­Docs के माध्यम से:

$newArray = call_user_func_array('array_merge', $arr); 
+0

'call_user_func_array' एक आकर्षण की तरह काम किया! धन्यवाद दोस्त। – racl101

+0

मैं इस विधि को पसंद करता हूं क्योंकि "foreach" लूप से बचें। धन्यवाद। –

+2

PHP 5.6 से शुरू करना आप स्प्लट ऑपरेटर '' '$ arr = array_merge (... $ arr)' '' का उपयोग कर सकते हैं। यह call_user_func_array –

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