2013-11-19 3 views
2

У меня есть следующий PHP код:Сравнение массивов дает разные результаты

$a = "5"; 
$b = array("position"=>1); 
var_dump("5" <= $b); 
var_dump("5" <= "Array"); 
var_dump("Z" <= $b); 
var_dump("Z" <= "Array"); 

результат является:

boolean true 
boolean true 
boolean true 
boolean false 

Мы знаем, что массив преобразуется в строку array. Что на самом деле происходит во время конверсии? Почему результаты в разных случаях ниже?

var_dump("Z" <= $b); // (in this case array convert to string "array") 
var_dump("Z" <= "Array"); // (in this case string "Array") 

Но результат отличается. Зачем?

+0

Что именно вы хотите сделать? И что вы пробовали? –

+0

это будет полезно: http://php.net/manual/en/language.types.type-juggling.php – Joren

+0

В чем вопрос? _'Почему массивы преобразуются в «Массив»? _? Тогда спросите разработчиков php. Но на самом деле - это правило не лучше и не хуже любого другого, так почему бы и нет? –

ответ

2

Как ручной states:

Сравнение с различными типами

массива | все | массив всегда больше

Если оба операнда являются строками, применяются правила сравнения строк.

Поэтому независимо от того, что первый операнд, < array() не всегда верно

1

Рассмотрим следующие два выражения:

var_dump("Z" <= $b); 
var_dump("Z" <= "Array"); 

В первом выражении, вы сравниваете строку и массив. Это сравнение всегда будет возвращаться TRUE. Как указывает PHP manual, если выполняется сравнение между двумя операндами, где один из них является массивом, выражение всегда будет оцениваться как TRUE. Если оба операнда являются массивами, то массив с меньшим числом членов считается меньшим.

Во втором выражении вы сравниваете Z с литеральной строкой Array. В этом случае строки сначала преобразуются в числа перед сравнением. Это обычная математика, и результат такой, как ожидалось. С Z приходит после A в алфавитном порядке, он вернется FALSE.

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