PHP array_merge не делает именно то, что мне нужно - PullRequest
0 голосов
/ 15 декабря 2011

Хорошо, вот мой первый массив:

(
[1] => Array
    (
        [27] => Array
            (
                [product_id] => 27
                [type] => hardware
                [step_number] => 1

            )

        [372] => Array
            (
                [product_id] => 372
                [type] => hardware
                [step_number] => 1

            )

        [92] => Array
            (
                [product_id] => 92
                [type] => hardware
                [step_number] => 1
            )

    )

[2] => Array
    (
        [335] => Array
            (
                [product_id] => 335
                [type] => hardware
                [step_number] => 2

            )

        [62] => Array
            (
                [product_id] => 62
                [type] => hardware
                [step_number] => 2
            )

        [356] => Array
            (
                [product_id] => 356
                [type] => hardware
                [step_number] => 2
            )

    )

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

(
[1] => Array
    (
        [655] => Array
            (
                [product_id] => 655
                [type] => optional
                [step_number] => 1
            )

        [54] => Array
            (
                [product_id] => 54
                [type] => optional
                [step_number] => 1
            )

        [554] => Array
            (
                [product_id] => 554
                [type] => optional
                [step_number] => 1
            )
    )

[2] => Array
    (
        [33] => Array
            (
                [product_id] => 33
                [type] => optional
                [step_number] => 2
            )
        [612] => Array
            (
                [product_id] => 612
                [type] => optional
                [step_number] => 2
            )
        [5] => Array
            (
                [product_id] => 5
                [type] => optional
                [step_number] => 2
            )
    ) 

 [3] => Array
            (
                [444] => Array
                    (
                        [product_id] => 444
                        [type] => optional
                        [step_number] => 3
                    )
                [6] => Array
                    (
                        [product_id] => 6
                        [type] => optional
                        [step_number] => 3
                    )
                [53] => Array
                    (
                        [product_id] => 53
                        [type] => optional
                        [step_number] => 3
                    )
            )

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

(
[1] => Array
(
        [27] => Array
            (
                [step_number] => 1)
....
[2] => Array
(
        [335] => Array
            (
                [step_number] => 2)
....
[3] => Array
(
        [655] => Array
            (
                [step_number] => 3)
....
[4] => Array
(
        [33] => Array
            (
                [step_number] => 4)
....
[5] => Array
(
        [444] => Array
            (
                [step_number] => 5)
....

, но когда я делаю

$all = array_merge($first, $second);

ключи

(
[0] => Array
[1] => Array
[2] => Array
[3] => Array
[4] => Array

Возможно ли это сделать ....

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

Попробуйте array_merge_recursive .. http://php.net/array_merge_recursive

0 голосов
/ 15 декабря 2011

Итерирование по первому набору ключей, затем использование Union array operator должно помочь.

//$first = array(...);
//$second = array(...);

foreach ($second as $key => $value)
{
    if (!isset($first[$key]))
    {
        $first[$key] = array();
    }

    $first[$key] += $value;
}
0 голосов
/ 15 декабря 2011

Это также из руководства по array_splice, если вы просто хотите добавить свой второй массив в первый (http://php.net/manual/en/function.array-push.php):

 array_splice($first, count($first), 0, $second);
...