2011-12-19 36 views
9

Ho due array, voglio unire questi due array in un singolo array. Si prega di vedere il dettaglio di seguito:php unire due array

primo array:

Array 
(
    [0] => Array 
     (
      [a] => 1 
      [b] => 2 
      [c] => 3 
     ) 

    [1] => Array 
     (
      [a] => 3 
      [b] => 2 
      [c] => 1 
     ) 
) 

secondo array:

Array 
(
    [0] => Array 
     (
      [d] => 4 
      [e] => 5 
      [f] => 6 
     ) 

    [1] => Array 
     (
      [d] => 6 
      [e] => 5 
      [f] => 4 
     ) 
) 

voglio questo risultato. Qualcuno sa come farlo?

Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 

    [1] => Array 
     (
      [0] => 3 
      [1] => 2 
      [2] => 1 
     ) 
    [2] => Array 
     (
      [0] => 4 
      [1] => 5 
      [2] => 6 
     ) 

    [3] => Array 
     (
      [0] => 6 
      [1] => 5 
      [2] => 4 
     ) 
) 

Spero tu abbia capito la domanda. Grazie in anticipo.

+4

c'è qualcosa di sbagliato con l'utilizzo di [array_merge] (http://php.net/array_merge)? –

+0

@JonStirling Sì, esiste se si desidera che il risultato specificato dall'OP conservi le chiavi degli array originali. Nota che la sua risposta ha indici basati su 0 per i suoi sotto-array. Se questo è il risultato di cui ha bisogno o non solo lui può rispondere! – liquorvicar

+0

Non vedo un problema con array_merge. Sembra OP: http://codepad.org/Bf5VpZOr – PiTheNumber

risposta

3

FISSO (nuovo)

function array_merge_to_indexed() { 
    $result = array(); 

    foreach (func_get_args() as $arg) { 
     foreach ($arg as $innerArr) { 
      $result[] = array_values($innerArr); 
     } 
    } 

    return $result; 
} 

accetta un numero illimitato di array in input, fonde tutti sub-array in un contenitore come array indicizzati, e restituisce il risultato .

EDIT 03/2014: Migliorata la leggibilità e l'efficienza

+1

Conserva le chiavi originali dagli array che non è il risultato che sta cercando (almeno non dai dati nella domanda). – liquorvicar

+1

@liquorvicar No, non è questo il punto della funzione, altrimenti avrei appena detto "usa array_merge()". Ho usato '[]' per convertire in indexed, anche se il tuo 'array_values ​​()' senza l'ultimo approccio di loop è decisamente migliore. – DaveRandom

+1

Ah ok, ho eseguito il tuo codice e non ha funzionato per me, ma guardando il tuo post modificato deve essere stata una vecchia versione che ho eseguito. – liquorvicar

1

Se si desidera restituire il risultato esatto si specifica nella tua domanda, allora qualcosa di simile a questo funzionerà

function array_merge_no_keys() { 
    $result = array(); 
    $arrays = func_get_args(); 
    foreach($arrays as $array) { 
     if(is_array($array)) { 
      foreach($array as $subArray) { 
       $result[] = array_values($subArray); 
      } 
     } 
    } 
    return $result; 
} 
0

array_merge fa il trucco:

$a = array(array(1,2,3), array(3,2,1)); 
$b = array(array(4,5,6), array(6,5,4)); 
var_dump(array_merge($a, $b)); 

Provalo: http://codepad.org/Bf5VpZOr

Esattamente il risultato desiderato.

+0

Ma non si tratta dei dati che l'OP sta utilizzando. Nei sub-array di input le chiavi sono associative (lettere singole) e gli array di risultati utilizzano un indice a 0. – liquorvicar

+0

sì, so che array_merge fa il trucco in '$ a = array (array (1,2,3), array (3,2,1)); $ b = array (array (4,5,6), array (6,5,4)); var_dump (array_merge ($ a, $ b)); ' ma NON NEL MIO CODICE. –

+0

ahh, so che lo vedo! Continuo a dire che il risultato è sbagliato ma è l'input. Mi dispiace per quello – PiTheNumber

0

È inoltre possibile utilizzare: array_merge_recursive; per array multidimensionali.

<?php 
    $ar1 = array("color" => array("favorite" => "red"), 5); 
    $ar2 = array(10, "color" => array("favorite" => "green", "blue")); 
    $result = array_merge_recursive($ar1, $ar2); 
    print_r($result); 
?> 

Risultato:

Array(
    [color] => Array 
     (
      [favorite] => Array 
       (
        [0] => red 
        [1] => green 
       ) 

      [0] => blue 
     ) 

    [0] => 5 
    [1] => 10 
) 

Fonte: PHP Manual.

3

modo più semplice e moderno è:

$merged = $array1 + ['apple' => 10, 'orange' => 20] + ['cherry' => 12, 'grape' => 32]; 

nuova sintassi matrice da php 5,4