Я хочу сравнить два индексированных массива таким образом, что значения будут одинаковыми для двух массивов, но порядок может отличаться, например, я пытался это сделать, но он просто не работает.
Пример 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
выше пример возвращает match Found, и это потому, что sort()
возвращает 1, если я пытаюсь сортировать индексированный массив, и оба $a
и $b
содержат 1
после сортировки, в результате чего условие является истинным, что совершенно неверно, этот трюк, похоже, не работает , я пробовал со многими различными функциями сортировки, такими как asort()
, arsort()
т. д., но никто не работает.
каково обходное решение для этого?
Спасибо
Вместо сравнения возвращаемых значений 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';
Если массивы имеют разные ключи, но одинаковые значения, они будут считаться равными. Вы также должны сравнить ключи массива, если это проблема.
$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: лучшее решение.