[2,5,3] [5,2,3]
Они равны, потому что они имеют одинаковые значения, но не в том же порядке. Могу ли я узнать, что без использования цикла foreach с in_array ()? Я не думаю, что это будет эффективно.
sort($a); sort($b); if ($a==$b) {//equal}
Это немного поздно, но в надежде, что это будет полезно:
Если вы уверены, что массивы содержат только строки или оба содержат только целые числа, то array_count_values($a) == array_count_values($b)
имеет лучшую временную сложность. Однако ответ пользователя1844933 более общий.
Если вы не хотите сортировать массивы, а просто хотите проверить равенство, независимо от порядка значений, используйте http://php.net/manual/en/function.array-intersect.php так:
$array1 = array(2,5,3); $array2 = array(5,2,3); if($array1 === array_intersect($array1, $array2) && $array2 === array_intersect($array2, $array1)) { echo 'Equal'; } else { echo 'Not equal'; }
Прибытие на эту вечеринку поздно. У меня был тот же вопрос, но я не хотел сортировать, что было прямым ответом, который, как я знал, будет работать. Я придумал этот простой однострочный вкладыш, который работает только для массивов уникальных значений :
$same = ( count( $a ) == count( $b ) && !array_diff( $a, $b ) )
Это также примерно в 5 раз быстрее, чем опция сортировки. Не то, чтобы это было особенно медленным, поэтому я бы сказал, что это больше о ваших личных предпочтениях и о том, что вы считаете более понятным. Лично я бы предпочел не сортировать.
Edit: Спасибо Ray за то, что это работает только с массивами с уникальными значениями.
$array1 = array(2,5,3); $array2 = array(5,2,3); $result = array_diff($array1, $array2); if(empty($result)) { echo "Both arrays are equal."; } else { echo "Both arrays are different."; }