В части программного обеспечения я объединять два массива с функцией 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;