2016-02-18 2 views
1

Я хочу объединить две базы массивов со значением столбца. Вот мои 2 массива.Объединить массив в соответствии со значениями столбцов соответствия в PHP

$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. но для меня это выглядит так уродливо. так что любые предложения?

+1

что случилось с использованием 'foreach'? он должен работать так хорошо, насколько это уродливо? показать свой код – Ghost

+1

try '$ array1 + $ array2' –

+0

' $ array1 + $ array2' –

ответ

1

вы можете попробовать 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); 
+0

Чувак Я вижу свет от вашего ответа. но как я могу получить все идентификаторы категорий? он показывает только один идентификатор категории из двух. Спасибо приятель. –

+0

в любом случае. я сам подумаю об этом. возможно, вы ответили на это достаточно, чтобы я мог понять. :) –

+0

Причина - первое слияние. Позвольте мне уточнить ответ –

Смежные вопросы