php - two - Fusionar matrices con las mismas claves
php join arrays with same keys (7)
En una pieza de software, fusiono dos matrices con la función array_merge
. Pero necesito agregar la misma matriz (con las mismas claves, por supuesto) a una matriz existente.
El problema:
$A = array(''a'' => 1, ''b'' => 2, ''c'' => 3);
$B = array(''c'' => 4, ''d''=> 5);
array_merge($A, $B);
// result
[a] => 1 [b] => 2 [c] => 4 [d] => 5
Como ve, ''c'' => 3
se pierde.
Entonces, ¿cómo puedo fusionarlos todos con las mismas claves?
Acabo de escribir esta función, debería ser el truco para ti, pero sí lo hizo.
public function mergePerKey($array1,$array2)
{
$mergedArray = [];
foreach ($array1 as $key => $value)
{
if(isset($array2[$key]))
{
$mergedArray[$value] = null;
continue;
}
$mergedArray[$value] = $array2[$key];
}
return $mergedArray;
}
Dos entradas en una matriz no pueden compartir una clave, deberá cambiar la clave para el duplicado
Prueba con array_merge_recursive
$A = array(''a'' => 1, ''b'' => 2, ''c'' => 3);
$B = array(''c'' => 4, ''d''=> 5);
$c = array_merge_recursive($A,$B);
echo "<pre>";
print_r($c);
echo "</pre>";
regresará
Array
(
[a] => 1
[b] => 2
[c] => Array
(
[0] => 3
[1] => 4
)
[d] => 5
)
Prueba esto:
$array_one = $_POST[''ratio_type''];
$array_two = $_POST[''ratio_type''];
$array_three = $_POST[''ratio_type''];
$array_four = $_POST[''ratio_type''];
$array_five = $_POST[''ratio_type''];
$array_six = $_POST[''ratio_type''];
$array_seven = $_POST[''ratio_type''];
$array_eight = $_POST[''ratio_type''];
$all_array_elements = array_merge_recursive(
$array_one,
$array_two,
$array_three,
$aray_four,
$array_five,
$array_six,
$array_seven,
$array_eight
);
print_r($all_array_elements, 1);
foreach ($all_array_elements as $key => $value) {
echo $key.''-''.$value;
}
array_merge_recursive
usar array_merge_recursive
lugar de array_merge
. Por supuesto, solo puede haber una clave igual a ''c''
en la matriz, pero el valor asociado será una matriz que contiene tanto 3
como 4
.
$A = array(''a'' => 1, ''b'' => 2, ''c'' => 3);
$B = array(''c'' => 4, ''d''=> 5);
$C = array_merge_recursive($A, $B);
$aWhere = array();
foreach ($C as $k=>$v) {
if (is_array($v)) {
$aWhere[] = $k . '' in (''.implode('', '',$v).'')'';
}
else {
$aWhere[] = $k . '' = '' . $v;
}
}
$where = implode('' AND '', $aWhere);
echo $where;
$arr1 = array(
"0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
"1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
"2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
"3" => array("fid" => 1, "tid" => 7, "name" => "Xi"),
"4" => array("fid" => 2, "tid" => 9, "name" => "Xigua")
);
si quieres convertir esta matriz de la siguiente manera:
$arr2 = array(
"0" => array(
"0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
"1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
"2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
"3" => array("fid" => 1, "tid" => 7, "name" => "Xi")
),
"1" => array(
"0" =>array("fid" => 2, "tid" => 9, "name" => "Xigua")
)
);
Entonces, mi respuesta será así:
$outer_array = array();
$unique_array = array();
foreach($arr1 as $key => $value)
{
$inner_array = array();
$fid_value = $value[''fid''];
if(!in_array($value[''fid''], $unique_array))
{
array_push($unique_array, $fid_value);
unset($value[''fid'']);
array_push($inner_array, $value);
$outer_array[$fid_value] = $inner_array;
}else{
unset($value[''fid'']);
array_push($outer_array[$fid_value], $value);
}
}
var_dump(array_values($outer_array));
Espero que esta respuesta ayude a alguien en algún momento.