Я пытаюсь сравнить с многомерными массивами, но не могу просто использовать array_diff_assoc(). Массивы, которые я пытаюсь сравнить, являются ассоциативными массивами, и они оба отсортированы, поэтому ключи находятся в одном и том же порядке. По большей части массивы идентичны по структуре. Кажется, я не могу понять, как сравнивать элементы, которые хранят массивы, я могу сравнить элементы, которые содержат одно значение, просто отлично. Кто-нибудь знает, что я могу сделать?
Сравнение многомерных массивов в PHP
Ответы (3)
На странице руководства для примечание пользователя. .php.net/array_diff_assoc" rel="nofollow noreferrer">array_diff_assoc() похоже, он делает то, о чем вы просите.
person
Peter Bailey
schedule
15.07.2009
Это именно то, что мне нужно. Я пропустил это, когда просматривал руководство, лол!
- 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