2011-07-25 20 views
9

¿Cómo puedo hacer un array_merge en una matriz asociativa, así:Matriz-Merge en una matriz asociativa en PHP

Matriz 1:

$options = array (
"1567" => "test", 
"1853" => "test1", 
); 

Matriz 2:

$option = array (
"none" => "N/A" 
); 

Entonces necesito array_merge estos dos pero cuando lo hago, obtengo esto (en depuración):

Array 
(
    [none] => N/A 
    [0] => test 
    [1] => test1 
) 
+0

_ "[Los valores en la matriz de entrada con las teclas numéricas se renumerarán con las teclas de incremento comenzando desde cero en la matriz de resultados.] (Http://php.net/manual/en/function.array-merge.php) "_. Si puede cambiar las teclas de matriz '$ options' para que contengan alguna cadena, entonces [funcionará perfectamente] (http://codepad.org/d5DbFdas). – Shef

+0

@Shef: Debe mencionar: cadenas no numéricas. – hakre

Respuesta

12

trate de usar:

$ finalArray = $ options + $ option .see http://codepad.org/BJ0HVtac Ju Para comprobar el comportamiento de las claves duplicadas, no probé esto. Para llaves únicas, funciona genial.

<?php 

$options = array (
        "1567" => "test", 
        "1853" => "test1", 
       ); 


$option = array (
"none" => "N/A" 
); 


$final = array_merge($option,$options); 

var_dump($final); 


$finalNew = $option + $options ; 

var_dump($finalNew); 

?> 
+1

Así es como php maneja las claves duplicadas: http://codepad.org/jpeynFf1 – NickSoft

+1

También recuerde que después de la fusión, las claves serán "0" y "1". La función array_merge() restablece las teclas numéricas. – ram4nd

0

cuando array_merge no funciona, entonces simplemente hacer

<?php 
$new = array(); 
foreach ($options as $key=>$value) $new[$key] = $value; 
foreach ($option as $key=>$value) $new[$key] = $value; 
?> 

o cambiar los dos bucles foreach dependiendo de la variedad tiene mayor prioridad

1

que estaba buscando para combinar dos matrices asociativas juntos, añadiendo los valores juntos si las claves son las mismas. Si hubiera claves exclusivas para cualquiera de las matrices, éstas se agregarían a la matriz fusionada con sus valores existentes.

no pude encontrar una función para hacer esto, por lo que hizo esto:

function array_merge_assoc($array1, $array2) 
{ 

    if(sizeof($array1)>sizeof($array2)) 
    { 
     echo $size = sizeof($array1); 
    } 
    else 
    { 
     $a = $array1; 
     $array1 = $array2; 
     $array2 = $a; 

     echo $size = sizeof($array1); 
    } 

    $keys2 = array_keys($array2); 

    for($i = 0;$i<$size;$i++) 
    { 
     $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]]; 
    } 

    $array1 = array_filter($array1); 
    return $array1; 
} 

Referencia: http://www.php.net/manual/en/function.array-merge.php#90136

11

Solo use $options + $option!

var_dump($options + $option); 

salidas:

array(3) { 
    [1567]=> 
    string(4) "test" 
    [1853]=> 
    string(5) "test1" 
    ["none"]=> 
    string(3) "N/A" 
} 

Pero tenga cuidado cuando hay un choque clave. Esto es lo que dice PHP manual:

Se conservarán las claves de la primera matriz. Si existe una clave de matriz en ambas matrices, se usará el elemento de la primera matriz y se ignorará el elemento de la clave coincidente de la segunda matriz.

1
$final_option = $option + $options; 
0

Este código podría ser utilizado para la fusión recursiva:

function merge($arr1, $arr2){ 
     $out = array(); 
     foreach($arr1 as $key => $val1){ 
      if(isset($arr2[$key])){ 
       if(is_array($arr1[$key]) && is_array($arr2[$key])){ 
        $out[$key]= merge($arr1[$key], $arr2[$key]); 
       }else{ 
        $out[$key]= array($arr1[$key], $arr2[$key]); 
       } 
       unset($arr2[$key]); 
      }else{ 
       $out[$key] = $arr1[$key]; 
      } 
     } 
     return $out + $arr2; 
} 
0

Si matrices teniendo mismas claves a continuación, utilizar array_merge_recursive()

$array1 = array("a" => "1" , "b" => "45"); 

$array2 = array("a" => "23" , "b" => "33"); 

$newarray = array_merge_recursive($array1,$array2); 

El array_merge_recursive() suele sobrescribir, sólo hace que el valor como una matriz.

Cuestiones relacionadas