Слияние массивов с теми же клавишами

В части программного обеспечения я объединять два массива с функцией array_merge . Но мне нужно добавить тот же массив (с теми же ключами, конечно) к существующему массиву.

Проблема:

  $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 

Как видите, 'c' => 3 пропущено.

Итак, как я могу объединить их все с теми же ключами?

Вам нужно использовать array_merge_recursive вместо array_merge . Конечно, в массиве может быть только один ключ, равный 'c' , но связанное значение будет массивом, содержащим как 3 и 4 .

Смотрите в действии .

пытаться

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

вернется

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

Справка

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

если вы хотите преобразовать этот массив следующим образом:

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

так, мой ответ будет таким:

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

надеюсь, что этот ответ когда-нибудь поможет кому-то.

Две записи в массиве не могут совместно использовать ключ, вам нужно будет изменить ключ для дубликата

Я просто написал эту функцию, она должна сделать трюк для вас, но он оставил соединение

 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; } 

Попробуй это:

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

И простой, который я нашел для не ассоциативного массива:

 $arrayMerged = $array1 + $array2;