Как проверить, имеют ли два индексированных массива одинаковые значения, даже если порядок не совпадает в PHP? - PullRequest
2 голосов
/ 30 июля 2011

Я хочу сравнить два индексированных массива так, чтобы значения были одинаковыми для двух массивов, но порядок может отличаться, например, я пытался сделать это, но это просто не работает.

Пример 1:

$a = array(1,2,3,4,5);
$b = array(1,2,3,5,4);
echo ($a == $b) ? 'Match Found' : 'No Match Found';
//Returns No Match Found

Пример 2: (попытался отсортировать массив, но он не сортируется)

$a = array(1,2,3,4,5);
$a = sort($a);
$b = array(1,2,3,5,4);
$b = sort($b);
echo ($a === $b) ? 'Match Found' : 'No Match Found';
//Returns Match Found

приведенный выше пример возвращает совпадение Found, и это потому, что sort() возвращает 1, если я пытаюсь выполнить сортировку по индексумассив, и оба $a и $b содержат 1 после сортировки, в результате чего условие является истинным, что является полностью неверным, этот трюк тоже не работает, я пробовал с множеством различных функций сортировки, таких как asort(), arsort() и т. д., но, похоже, ни один из них не работает.

Какой обходной путь для этого?

спасибо

Ответы [ 2 ]

2 голосов
/ 30 июля 2011
$a = array(1,2,3,4,5);
$b = array(1,3,2,5,3,4);


if(count($a) == count($b) && count(array_diff($a, $b)) == 0){
    echo "A";
}

Необходимо выполнить проверку длины, иначе два вышеуказанных массива будут одинаковыми.

edit: лучшее решение.

1 голос
/ 30 июля 2011

Вместо сравнения возвращаемых значений sort, почему бы вам просто не сравнить массивы после их сортировки?

$a = array(1,2,3,4,5);
sort($a);
$b = array(1,2,3,5,4);
sort($b);
echo ($a == $b) ? 'Match Found' : 'No Match Found';

Если массивы имеют разные ключи, но одинаковые значения, онивсе равно будет считаться равным.Вы также должны сравнить ключи массива, если это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...