Объединить два массива в один по ключам

249
25 сентября 2017, 04:07
Array(
[0] => Array
    (
        [orders] => 5
        [manager_customer_id] => 85
    )
[1] => Array
    (
        [orders] => 1
        [manager_customer_id] => 124
    )
[2] => Array
    (
        [orders] => 6
        [manager_customer_id] => 86
    )
 )
Array(

[0] => Array
    (
        [name_manager_customer] => Nick Name
        [manager_customer_id] => 85
        [manager_id] => 699
        [city_manager_customer] => 
        [shop_manager_customer] => 
        [phone_manager_customer] => 
        [vk_id_manager_customer] => just_nick_name
        [card_number] => 
        [card_name] => 
    )
[1] => Array
    (
        [name_manager_customer] => Queen Time
        [manager_customer_id] => 124
        [manager_id] => 699
        [city_manager_customer] => 
        [shop_manager_customer] => 
        [phone_manager_customer] => 
        [vk_id_manager_customer] => 
        [card_number] => 
        [card_name] => 
    )
[2] => Array
    (
        [name_manager_customer] => БигБен
        [manager_customer_id] => 86
        [manager_id] => 699
        [city_manager_customer] => 
        [shop_manager_customer] => 
        [phone_manager_customer] => 
        [vk_id_manager_customer] => 
        [card_number] => 
        [card_name] => 
    )
)

У них manager_customer_id одинаковые ни как не могу сообразить как объединить, что бы получилось

Array(

 [0] => Array
   (
       [name_manager_customer] => Nick Name
       [manager_customer_id] => 85
       [manager_id] => 699
       [city_manager_customer] => 
       [shop_manager_customer] => 
       [phone_manager_customer] => 
       [vk_id_manager_customer] => just_nick_name
       [card_number] => 
       [card_name] => 
       [orders] => 5 
    )
 )
Answer 1

Возьмите ваши исходные данные

$orders = [
        ['orders' => 5, 'manager_customer_id' => 85],
        ['orders' => 1, 'manager_customer_id' => 124],
        ['orders' => 6, 'manager_customer_id' => 86]
     ];
$data = [
    [
        'name_manager_customer' => "Nick Name",
        'manager_customer_id' => 85,
        'manager_id' => 699,
    ],
    [
        'name_manager_customer' => "Queen Time",
        'manager_customer_id' => 124,
        'manager_id' => 699,
    ],
    [
        'name_manager_customer' => "БигБен",
        'manager_customer_id' => 86,
        'manager_id' => 699,
    ]
];

и преобразуйте первый массив к удобному виду, где идентификаторы будут ключами

$odata =  array_column($orders, 'orders', 'manager_customer_id');

пройдитесь по второму массиву, и расставьте значения

foreach($data as &$d){
    $d['orders'] =  $odata[$d['manager_customer_id']];
}

Если второй массив трогать не надо, то сложите результат в третий

$result = [];
foreach($data as $d){
    $d['orders'] = $odata[$d['manager_customer_id']];
    $result[] = $d;
}
Answer 2

Ещё вариант:

<?php
$a_1 = array(
    array(
        'orders' => 5,
        'manager_customer_id' => 85
    ),
    array(
        'orders' => 1,
        'manager_customer_id' => 124
    ),
    array(
        'orders' => 6,
        'manager_customer_id' => 86
    )
);
$a_2 = array(
    array(
        'name_manager_customer' => 'Nick Name',
        'manager_customer_id' => 85,
        'manager_id' => 699,
        'city_manager_customer' => '',
        'shop_manager_customer' => '',
        'phone_manager_customer' => '',
        'vk_id_manager_customer' => 'just_nick_name',
        'card_number' => '',
        'card_name' => ''
    ),
    array(
        'name_manager_customer' => 'Queen Time',
        'manager_customer_id' => 124,
        'manager_id' => 699,
        'city_manager_customer' => '',
        'shop_manager_customer' => '',
        'phone_manager_customer' => '',
        'vk_id_manager_customer' => '',
        'card_number' => '',
        'card_name' => ''
    ),
    array(
        'name_manager_customer' => '',
        'manager_customer_id' => 86,
        'manager_id' => 699,
        'city_manager_customer' => '',
        'shop_manager_customer' => '',
        'phone_manager_customer' => '',
        'vk_id_manager_customer' => '',
        'card_number' => '',
        'card_name' => ''
    )
);

$result = [];
for ($i = 0, $all = count($a_1); $i < $all; $i++) {
    $result[] = array_merge($a_2[$i], $a_1[$i]);
}
echo '<pre>'; print_r($result); echo '</pre>';
READ ALSO
Ajax выдает ошибку

Ajax выдает ошибку

Доброго времени суток! Сразу предупрежу на всякий случай, что я в веб разработке новичок ) Возникла проблема с Ajax (как раз занимаюсь изучением)А...

206
Передача GET запроса в php (.htaccess)

Передача GET запроса в php (.htaccess)

ЗдравствуйтеВозникла проблема, не получается использовать GET запрос в этой части кода (при нажатии на ссылку должно переводить на страницу...

260
Множество проверок, множество запросов

Множество проверок, множество запросов

Условия: как минимум 1, как максимум 3 строки, где userid=$_SESSION['id']; наличие для этих строк в столбцах active значений 1, 2 или 3 (обязательно все три,...

230
Как прописать таймер загрузки кеев?

Как прописать таймер загрузки кеев?

подскажите делаю парсерто есть беру ключи из файла, но бывает несколько тысяч ключей и очень тормозит

228