2015-07-06 2 views
3

$ массив 1: -PHP объединить две ассоциативные массивы

Array 
(
    [Test Stock] => Array 
     (
      [intStockCount] => 10 
     ) 

    [CARTON 50 X 50 X 50] => Array 
     (
      [intStockCount] => 10 
     ) 
) 

$ array2: -

Array 
(
    [Test Stock] => Array 
     (
      [intInvoiceCount] => 20 
     ) 

    [CARTON 50 X 50 X 50] => Array 
     (
      [intInvoiceCount] => 30 
     ) 
) 

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

Array 
(
    [Test Stock] => Array 
     (
      [intStockCount] => 10 
      [intInvoiceCount] => 20 
     ) 

    [CARTON 50 X 50 X 50] => Array 
     (
      [intStockCount] => 10 
      [intInvoiceCount] => 30 
     ) 
) 
+0

возможного дубликат [Объединение двух массивов] (http://stackoverflow.com/questions/6535444/comb-two-arrays) – Viral

ответ

2

Вы можете использовать array_merge_recursive, чтобы сделать работу.

array_merge_recursive

array_merge_recursive() объединяет элементы одного или более массивов таким образом, что значения одного присоединяются к концу предыдущего. Он возвращает результирующий массив.

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

Вобще:

<?php 
$array1 = array(
    "Test Stock" => array(
     "intStockCount" => 10 
    ), 
    "CARTON 50 X 50 X 50" => array(
     "intStockCount" => 10 
    ) 
); 

$array2 = array(
    "Test Stock" => array(
     "intInvoiceCount" => 20 
    ), 
    "CARTON 50 X 50 X 50" => array(
     "intInvoiceCount" => 30 
    ) 
); 

$final = array_merge_recursive($array1,$array2); 
echo '<pre>'; 
print_r($final); 
echo '</pre>'; 

/* OUTPUT 
Array 
(
    [Test Stock] => Array 
     (
      [intStockCount] => 10 
      [intInvoiceCount] => 20 
     ) 

    [CARTON 50 X 50 X 50] => Array 
     (
      [intStockCount] => 10 
      [intInvoiceCount] => 30 
     ) 

) 
*/ 

Важно отметить здесь, что вы используете ту же строку key в оба ваших arrays. Как утверждают PHP DOCS

... значение этих ключей объединяются в массив

2

$array1 = array(
    'Test Stock' => array(
     'intStockCount' => 10, 
    ), 
    'CARTON 50 X 50 X 50' => array(
     'intStockCount' => 10 
    ) 
    ); 
    $array2 = array(
    'Test Stock' => array(
     'intStockCount' => 10, 
    ), 
    'CARTON 50 X 50 X 50' => array(
     'intStockCount' => 10 
    ) 
    ); 
    $result = array_merge_recursive($array1, $array1); 

    var_dump($result); 

Вам нужно изменить структуру массива.

Для нормального массива marge: $ result = array_merge ($ array1, $ array2);

http://php.net/manual/en/function.array-merge.php

+1

Это не будет работать в этом случае, потому что те же строковые ключи. Более позднее значение для этого ключа перезапишет предыдущий. – DavidDomain

+0

@DavidDomain вы правы, по этой причине вам нужна функция array_merge_recursive. Я отредактировал свой ответ. А также нужно правильно управлять структурой массива. –

+0

Это вариант. Я удалил проголосовавший голос, но я бы предпочел бы «array_merge_recursive». Мы должны учитывать, что OP не хочет изменять структуру массива. – DavidDomain

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