$array1 = array("$name1" => "$id1");
$array2 = array("$name2" => "$id2", "$name3" => "$id3");
Necesito una nueva matriz que combine todos juntos, es decir, sería
$array3 = array("$name1" => "$id1", "$name2" => "$id2", "$name3" => "$id3");
¿Cuál es la mejor manera de hacer esto?
Lo siento, lo olvidé, los identificadores nunca coincidirán entre sí, pero técnicamente los nombres podrían, pero no serían probables, y todos deben enumerarse en una matriz. Miré array_merge pero no estaba seguro de si esa era la mejor manera de hacer esto. Además, ¿cómo probarías esto por unidad?
php
arrays
multidimensional-array
associative-array
jsteinmann
fuente
fuente
Respuestas:
array_merge()
es más eficiente pero hay un par de opciones:$array1 = array("id1" => "value1"); $array2 = array("id2" => "value2", "id3" => "value3", "id4" => "value4"); $array3 = array_merge($array1, $array2/*, $arrayN, $arrayN*/); $array4 = $array1 + $array2; echo '<pre>'; var_dump($array3); var_dump($array4); echo '</pre>'; // Results: array(4) { ["id1"]=> string(6) "value1" ["id2"]=> string(6) "value2" ["id3"]=> string(6) "value3" ["id4"]=> string(6) "value4" } array(4) { ["id1"]=> string(6) "value1" ["id2"]=> string(6) "value2" ["id3"]=> string(6) "value3" ["id4"]=> string(6) "value4" }
fuente
array_merge
devolverá NULL si alguno de los argumentos es NULL.Echa un vistazo
array_merge()
.fuente
También existe
array_replace
, donde una matriz original es modificada por otras matrices preservando la asociación clave => valor sin crear claves duplicadas.fuente
Utilizo un contenedor alrededor de array_merge para tratar el comentario de SeanWM sobre matrices nulas; A veces también quiero deshacerme de los duplicados. En general, también quiero fusionar una matriz con otra, en lugar de crear una nueva matriz. Esto termina como:
/** * Merge two arrays - but if one is blank or not an array, return the other. * @param $a array First array, into which the second array will be merged * @param $b array Second array, with the data to be merged * @param $unique boolean If true, remove duplicate values before returning */ function arrayMerge(&$a, $b, $unique = false) { if (empty($b)) { return; // No changes to be made to $a } if (empty($a)) { $a = $b; return; } $a = array_merge($a, $b); if ($unique) { $a = array_unique($a); } }
fuente
$array = array( 22 => true, 25 => true, 34 => true, 35 => true, ); print_r( array_replace($array, [ 22 => true, 42 => true, ]) ); print_r( array_merge($array, [ 22 => true, 42 => true, ]) );
Si es una matriz asociativa numérica pero no secuencial, debe usar
array_replace
fuente
Me encontré con esta pregunta tratando de identificar una forma limpia de unir dos matrices asociadas.
Estaba tratando de unir dos tablas diferentes que no tenían relaciones entre sí.
Esto es lo que se me ocurrió para PDO Query uniendo dos tablas. Samuel Cook es quien identificó una solución para mí con el
array_merge()
+1 para él.$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM ".databaseTbl_Residential_Prospects.""; $ResidentialData = $pdo->prepare($sql); $ResidentialData->execute(array($lapi)); $ResidentialProspects = $ResidentialData->fetchAll(PDO::FETCH_ASSOC); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM ".databaseTbl_Commercial_Prospects.""; $CommercialData = $pdo->prepare($sql); $CommercialData->execute(array($lapi)); $CommercialProspects = $CommercialData->fetchAll(PDO::FETCH_ASSOC); $Prospects = array_merge($ResidentialProspects,$CommercialProspects); echo '<pre>'; var_dump($Prospects); echo '</pre>';
Quizás esto ayude a alguien más.
fuente
ACTUALIZACIÓN Solo una nota rápida, ya que puedo ver que esto se ve realmente estúpido, y no tiene un buen uso con PHP puro porque
array_merge
simplemente funciona allí. PERO pruébelo con el controlador PHP MongoDB antes de apresurarse a votar en contra. Ese tipo agregará índices por cualquier razón y arruinará el objeto fusionado. Con mi pequeña e ingenua función, la fusión sale exactamente como se suponía que salía con una tradicionalarray_merge
.Sé que es una vieja pregunta, pero me gustaría añadir un caso más que tuve recientemente con consultas MongoDB conductor y ninguno de
array_merge
,array_replace
niarray_push
trabajado. Tenía una estructura un poco compleja de objetos envueltos como matrices en matriz:$a = [ ["a" => [1, "a2"]], ["b" => ["b1", 2]] ]; $t = [ ["c" => ["c1", "c2"]], ["b" => ["b1", 2]] ];
Y necesitaba fusionarlos manteniendo la misma estructura como esta:
$merged = [ ["a" => [1, "a2"]], ["b" => ["b1", 2]], ["c" => ["c1", "c2"]], ["b" => ["b1", 2]] ];
La mejor solución que se me ocurrió fue esta:
public static function glueArrays($arr1, $arr2) { // merges TWO (2) arrays without adding indexing. $myArr = $arr1; foreach ($arr2 as $arrayItem) { $myArr[] = $arrayItem; } return $myArr; }
fuente