Сравнение многомерных массивов в PHP - PullRequest
0 голосов
/ 15 июля 2009

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

Спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 15 июля 2009

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

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

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

2 голосов
/ 15 июля 2009

На странице руководства есть добавленная пользователем заметка для array_diff_assoc () , которая, кажется, делает то, что вы просите.

1 голос
/ 15 июля 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...