2011-12-19 21 views
9

Tengo dos matrices, quiero fusionar estas dos matrices en una sola matriz. Por favor, ver el detalle a continuación:php fusionar dos matrices

primera matriz:

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

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

segunda matriz:

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

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

Quiero este resultado. ¿Alguien sabe cómo hacer esto?

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 
     ) 
) 

Espero que hayas entendido la pregunta. Gracias de antemano.

+4

¿Hay algo malo con el uso [array_merge] (http://php.net/array_merge)? –

+0

@JonStirling Sí, si desea el resultado, el OP especifica que preservará las claves de las matrices originales. Tenga en cuenta que su respuesta tiene índices basados ​​en 0 para sus sub-arrays. Si ese es el resultado que él necesita o no, ¡solo él puede responder! – liquorvicar

+0

No veo ningún problema con array_merge. Parece OP: http://codepad.org/Bf5VpZOr – PiTheNumber

Respuesta

3

FIJO (de nuevo)

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

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

    return $result; 
} 

acepta un número ilimitado de matrices de entrada, se fusiona todas las matrices sub en un contenedor como matrices indexadas, y devuelve el resultado .

EDITAR 03/2014: mejorar la legibilidad y la eficiencia

+1

Esto preserva las claves originales de las matrices, que no es el resultado que está buscando (al menos no a partir de los datos en la pregunta). – liquorvicar

+1

@liquorvicar No, no, ese es el objetivo de la función; de lo contrario, hubiera dicho "use array_merge()". Usé '[]' para convertir a indexado, aunque su 'array_values ​​()' sin el último enfoque de bucle es posiblemente mejor. – DaveRandom

+1

Ah, sí, ejecuté tu código y no funcionó, pero al mirar tu publicación editada debe haber sido una versión anterior que ejecuté. – liquorvicar

1

Si desea devolver el resultado exacto que especifique en su pregunta, algo como esto trabajarán

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 hace el truco:

$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)); 

Inténtelo: http://codepad.org/Bf5VpZOr

Exactamente el resultado deseado.

+0

Pero esos no son los datos que usa el OP. En las sub-matrices de entrada, las claves son asociativas (letras simples) y las matrices de resultados están usando un índice basado en 0. – liquorvicar

+0

sí, sé que array_merge hace el truco en '$ a = array (array (1,2,3), array (3,2,1)); $ b = array (matriz (4,5,6), matriz (6,5,4)); var_dump (array_merge ($ a, $ b)); ' pero NO EN MI CÓDIGO. –

+0

ahh, ¡sé que lo veo! Everbody sigue diciendo que el resultado es incorrecto, pero es la entrada. Lo siento por eso. – PiTheNumber

0

También puede utilizar: array_merge_recursive; para matrices multidimensionales.

<?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); 
?> 

Resultado:

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

      [0] => blue 
     ) 

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

Fuente: PHP Manual.

3

modo más sencillo y moderno es:

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

nueva sintaxis de matrices de PHP 5.4