Сравнение многомерных массивов в PHP

Я пытаюсь сравнить с многомерными массивами, но не могу просто использовать array_diff_assoc(). Массивы, которые я пытаюсь сравнить, являются ассоциативными массивами, и они оба отсортированы, поэтому ключи находятся в одном и том же порядке. По большей части массивы идентичны по структуре. Кажется, я не могу понять, как сравнивать элементы, которые хранят массивы, я могу сравнить элементы, которые содержат одно значение, просто отлично. Кто-нибудь знает, что я могу сделать?


person cskwrd    schedule 15.07.2009    source источник


Ответы (3)


На странице руководства для примечание пользователя. .php.net/array_diff_assoc" rel="nofollow noreferrer">array_diff_assoc() похоже, он делает то, о чем вы просите.

person Peter Bailey    schedule 15.07.2009
comment
Это именно то, что мне нужно. Я пропустил это, когда просматривал руководство, лол! - person cskwrd; 15.07.2009

Если вы пытаетесь просто увидеть, отличаются ли они (а не то, что конкретно отличается), вы можете попробовать что-то вроде:

 return serialize($array1) == seralize($array2);

Это дало бы вам да или нет на равенство двух массивов.

person null    schedule 15.07.2009

Неясно, хотите ли вы увидеть, равны ли они, или действительно хотите получить вывод о различиях.

Если это первое, вы можете сделать это правильно, с помощью рекурсивной функции:

$array1 = array('a' => 1, 'b' => 2, 'c' => array('ca' => 1, 'cb' => array('foo')));
$array2 = array('a' => 1, 'b' => 2, 'c' => array('ca' => 1, 'cb' => array('bar')));

var_dump(arrayEqual($array1, $array2));

function arrayEqual($a1, $a2)
{
    if (count(array_diff($a1, $a2)))
        return false;

    foreach ($a1 as $k => $v)
    {
        if (is_array($v) && !arrayEqual($a1[$k], $a2[$k]))
            return false;
    }

    return true;
}

Или используйте полный хак, например:

if (serialize($array1) == serialize($array2))
person Greg    schedule 15.07.2009