2014-12-06 3 views
4

По http://php.net/manual/en/language.operators.array.php:Требует ли равенство массива PHP в том же порядке?

$a == $b Equality TRUE if $a and $b have the same key/value pairs. 
$a === $b Identity TRUE if $a and $b have the same key/value pairs in the same order and of the same types. 

Как таковой, я ожидал бы эти два массива, чтобы иметь равенство, но они этого не делают.

$a1=array('a','b'); 
$a2=array('b','a'); 
echo(($a1==$a2)?'equal':'not equal'); 

Я мог бы отсортировать массивы сначала, и они имеют как равенство, так и идентичность.

Я неверно истолковал руководство по PHP? Равномерное равенство массива PHP требует элементов в одном порядке?

EDIT. Ответы на вопросы отвечали на вопрос. Возможные обходные пути включают следующее. Хотя это не является частью моего первоначального вопроса, любые рекомендации по наилучшему способу реализации будут оценены по достоинству.

<?php 
$a1=array('a','b'); 
$a2=array('b','a'); 
echo((($a1==$a2)?'equal':'not equal').'<br>'); 
echo(((array_diff($a1, $a2) === array_diff($a2, $a1))?'equal':'not equal').'<br>'); 
sort($a1); 
sort($a2); 
echo((($a1==$a2)?'equal':'not equal').'<br>'); 
?> 

ВЫВОД:

not equal 
equal 
equal 
+0

может быть, если вы отсортированы их первым, прежде чем сравнивать их (не пробовал, но, похоже, это первое, что пришло в голову) [для тех, кто не знает, как - http://php.net/manual/en/array.sorting.php] – Jonathan

+0

Да , сортировка будет работать. Но так ответ Лаури (она позже удалила его). Я поправлю свое оригинальное сообщение для справки другого. – user1032531

ответ

4

Это потому, что:

В первом массиве это:

0 => a 
1 => b 

А во втором массиве это:

0 => b 
1 => a 

Так values и keys - это то же самое, но не как pair!

Так что если вы меняете ключи во втором массиве это TRUE, так как значение и ключ являются такими же, как пара:

$a1 = array('a','b'); 
$a2 = array(1 =>'b', 0 =>'a'); 
echo(($a1==$a2)?'equal':'not equal'); 

Выход:

equal 
+1

А, я вижу! Не та же пара! Это сводило меня с ума, но теперь я вижу очевидное. – user1032531

+0

@ user1032531 Да, это может быть немного запутанным! Приятно, что я мог бы вам помочь – Rizier123

1

Сво хороший вопрос, но, как уже Документы. Ему нужны одинаковые пары значений. Ваш первый массив - 1 => a, а ваш второй - 2=>a

То же самое для b. Поэтому поэтому не равно.

Примером может быть

$a=array('a'=>'a','b'=>'b'); 
$a=array('b=>'b','a'=>'a'); 
+0

Как я указал Ризиру, спасибо! – user1032531

Смежные вопросы