recorrer - sumar columna array php
PHP combina dos matrices asociativas en una matriz (7)
Echa un vistazo a array_merge()
.
$array3 = array_merge($array1, $array2);
$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, aunque no serían posibles, y todos deben aparecer en una matriz. Miré array_merge pero no estaba seguro de si esa era la mejor manera de hacerlo. Además, ¿cómo probarías esto?
Me encontré con esta pregunta tratando de identificar una forma limpia de unir dos matrices de asociaciones.
Intentaba unir dos tablas diferentes que no tenían relación entre sí.
Esto es lo que se me ocurrió para PDO Query unir dos tablas. Samuel Cook es lo que identificó una solución para mí con el array_merge()
+1 a é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>'';
Tal vez esto ayudará a alguien más a salir.
Otra opción es array_replace , donde una matriz original es modificada por otras matrices:
- Las mismas teclas harán que los valores subsiguientes sobreescriban la matriz original
- Se crearán nuevas claves en arreglos subsiguientes en la matriz original
Esto significa que la asociación key => value se conserva y no se insertan claves duplicadas.
Sé que es una vieja pregunta, pero me gustaría agregar un caso más que tuve recientemente con las consultas del controlador MongoDB y ninguno de los array_replace
array_merge
, array_replace
ni array_push
funcionó. Tenía una estructura de objetos un poco compleja envuelta como matrices en una 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;
}
Utilizo un wrapper alrededor de array_merge para tratar el comentario de SeanWM sobre matrices nulas; También a veces quiero deshacerme de duplicados. En general, también quiero fusionar una matriz en 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);
}
}
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>'';
$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 se trata de una matriz asociativa numérica pero no secuencial, debe usar array_replace