2012-05-03 10 views
8

Ho un array che può apparire comespostare tutti gli elementi della matrice di un livello in un array multidimensionale

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

e voglio trasformarlo in

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

così ho cercato di spostare tutti gli elementi dell'array di un livello.

eidt:

questo è il mio metodo che combina 2 serie insieme:

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

Avevo bisogno di fare la stessa cosa, anche se ho trovato che semplicemente facendo '$ newArray = $ oldArray [0]' era tutto ciò che serviva per risolvere il problema. Non funzionerebbe nel tuo caso? – vertigoelectric

risposta

10

Prova

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

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

Uscita

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

grazie, questo ha funzionato perfettamente in combinazione con il mio metodo arrayMerge()! – Eli

+1

Non esiste una ** funzione incorporata ** per fare questo ** SENZA ** usando un 'foreach'? Sarebbe più semplice ** convertire la matrice multidimensionale in una singola dimensione in PHP ** – Neocortex

+0

Ero alla ricerca di una tale funzione incorporata da molto tempo perché non possiamo usare i cicli foreach nidificati da 3 a 4 per estrarre i dati dalla matrice. Se qualcuno potesse venire senza usare foreach esp: con la funzione built in, allora lo chiamerei come una corona di PHP. – Neocortex

16

E 'un po' banale, per molti versi sono possibili.

Ad esempio usando l'array union operator (+)­Docs creare l'unione di tutte le matrici all'interno della matrice:

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

o utilizzando array_merge­Docs con tutti i sottoarray contemporaneamente tramite call_user_func_array­Docs:

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

'call_user_func_array' ha funzionato come un incantesimo! Grazie uomo. – racl101

+0

Preferisco questo metodo perché evito il ciclo "foreach". Grazie. –

+2

A partire da PHP 5.6 è possibile utilizzare l'operatore splat '' '$ arr = array_merge (... $ arr)' ''. È significativamente più veloce di call_user_func_array –

Problemi correlati