PHP: Предупреждение: array_merge_recursive (): обнаружена рекурсия - PullRequest
1 голос
/ 29 января 2010

У меня есть список массивов (неизвестное количество), мне нужно рекурсивно объединить их все.

Итак, что я сделал, создал массив всех этих массивов и передал их в эту функцию:

function mergeMonth($array)
{
    foreach($array as $date_string => $inner_array)
    {
        if(isset($temp_inner_array))
        {
            $temp_inner_array = array_merge_recursive($temp_inner_array,$inner_array);
        }
        else
        {
            $temp_inner_array = $inner_array;
        }
    }

    return $temp_inner_array;
}

В большинстве случаев это работает так, как я ожидал, но иногда я получаю эту ошибку:

Предупреждение: array_merge_recursive (): обнаружена рекурсия в ... в строке 89

Не знаю почему?

Есть идеи?

Спасибо !!

UPDATE

структура выглядит так:

Array
(
    [sales] => 301.5
    [cost] => 
    [repairs] => 0
    [esps] => 0
    [margin] => 301.5
    [verified] => unverified
)

Который я затем изменил на:

Array
(
    [sales] => 301.5
    [cost] => 0
    [repairs] => 0
    [esps] => 0
    [margin] => 301.5
    [verified] => unverified
)

и это решило проблему:)

Обратите внимание, что любой, кто может объяснить, ПОЧЕМУ мое изменение исправило это, получит принятый ответ!

1 Ответ

1 голос
/ 29 января 2010

Возможно, один массив ссылался на другой.

Простой пример

        $a = array
        (
            'cost' => null,
        );
        $b = array
        (
            'cost' => &$a['cost'], // appears as "[cost] => " 
                                   // because $a['cost'] is null
        );

Это приводит к рекурсии.

Я просто не знаю, какой дизайн может вызвать это ...

...