2016-02-23 7 views
1

У меня есть эти 2 массива, исходящие из двух отдельных операторов SQL.PHP: Объединение массивов

первый массив:

$a1 = array(
    array('referral_count' => 213), 
    array('referral_count' => 88), 
    array('referral_count' => 35) 
); 

второй массив:

$a2 = array(
    array('ocean_company_id' => 524, 'customer_company_id' => 522), 
    array('ocean_company_id' => 527, 'customer_company_id' => 522), 
    array('ocean_company_id' => 544, 'customer_company_id' => 543) 
); 

Теперь то, что я хочу сделать, это объединить оба массива, чтобы стать:

$a3 = array(
    array(
     'ocean_company_id' => 524, 
     'customer_company_id' => 522, 
     'referral_count' => 213), 
    array(
     'ocean_company_id' => 527, 
     'customer_company_id' => 522, 
     'referral_count' => 88), 
    array(
     'ocean_company_id' => 544, 
     'customer_company_id' => 543, 
     'referral_count' => 35) 
); 

Я попытался array_merge и array_merge_recursive но он добавляет массив вместо объединения. Благодаря!

PS. У меня есть другие массивы, которые я хочу комбинировать, но это общая идея.

+1

Прежде чем перейти на сторону PHP, можно ли объединить SQL в один запрос? – chris85

+0

К сожалению, он не может быть скомбинирован :(Я уже пробовал этот маршрут, так как есть много других данных, необходимых из основного оператора SQL. – Knide

+0

У меня есть 1 основной оператор SQL, который извлекает разные идентификаторы, а внутри моего цикла while мне нужно ids для запроса к другим таблицам для получения других данных/счетчиков, поэтому необходимо объединить результаты в 1 массив. – Knide

ответ

2

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

$result = array(); 

foreach ($array1 as $i => $arr) 
{ 
    $result[$i] = array_merge($arr, $array2[$i]); 
} 

var_dump($result); 
1

Существует много способов сделать это. Вот какой-то странный способ добавить значения из первого массива во второй массив.

for ($i=0; isset($a1[$i]); $a2[$i]['referral_count'] = $a1[$i]['referral_count'], $i++); 

Это в основном то же самое, как

$i = 0; 
while (isset($a1[$i])) { 
    $a2[$i]['referral_count'] = $a1[$i]['referral_count']; 
    $i++; 
} 

Преимущество этого подхода состоит в том, что нет никаких вызовов функций и никаких дополнительных переменных, которые создаются (кроме $i);

Если вы не хотите, чтобы изменить входные массивы, вы можете использовать array_map с array_merge, чтобы объединить их в новый массив:

$a3 = array_map('array_merge', $a2, $a1); 

Преимущество такого подхода состоит в том, что, поскольку обе эти функции возьмите переменное количество аргументов, вы можете объединить столько массивов, сколько захотите.

+0

самое быстрое решение: $ a3 = array_map ('array_merge', $ a2, $ a1); – Onur

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