Я хочу объединить две базы массивов на соответствие значения столбца. Вот мои 2 массива.
$array1 = array(2) { [0] => array(2) { ["total_process_per_category"] => string(2) "6" ["category_id"] => string(1) "1" } [1] => array(2) { ["total_process_per_category"] => string(1) "2" ["category_id"] => string(1) "2" } } $array2 = array(2) { [0] => array(2) { ["total_pinned_per_category"] => string(2) "16" ["category_id"] => string(1) "1" } [1] => array(2) { ["total_pinned_per_category"] => string(1) "4" ["category_id"] => string(1) "2" } }
то, что я хочу получить с этими двумя массивами, – вот что.
array(2) { [0] => array(3) { ["total_process_per_category"] => string(2) "6" ["total_pinned_per_category"] => string(2) "16" ["category_id"] => string(1) "1" } [1] => array(3) { ["total_process_per_category"] => string(2) "2" ["total_pinned_per_category"] => string(1) "4" ["category_id"] => string(1) "2" } }
так как вы можете видеть, что два массива имеют один и тот же ключ ['category_id'] и одинаковое значение.
поэтому то, что я хочу выполнить, – это результат, который ['total_process_per_category'] и ['total_pinned_per_category'] размещаются вместе на одной базе массивов на их ['category_id'].
Я получил это, используя вложенный foreach. но для меня это выглядит так уродливо. так что любые предложения?
вы можете попробовать array_reduce
:
$someVariable = 'someValue'; $result = array_reduce(array_merge($array1, $array2), function ($carry, $item) use ($someVariable) { if (isset($carry[$item['category_id']])) { $carry[$item['category_id']] = array_merge($carry[$item['category_id']], $item); } else { $carry[$item['category_id']] = $item; } return $carry; }, array()); var_dump($result);