Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сравнение массивов
Форумы портала PHP.SU » PHP » Программирование на PHP » Сравнение массивов

Страниц (1): [1]
 

1. Избранный - 16 Января, 2010 - 16:19:01 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $a = array(3, 5, 30);
  2. $b = array(5, 7, 2);
  3.  
  4. var_dump($a > $b); // bool(false)
  5.  
  6. var_dump($a < $b); // bool(true)


Почему выпадают такие результаты?
2. vitaliy_mad - 16 Января, 2010 - 16:21:12 - перейти к сообщению
а какие должны быть? Вы уверены что операторы < и > предназначены для массивов?

здесь фукцнии работы с массивами http://php.su/functions/?cat=array
3. Избранный - 16 Января, 2010 - 16:23:13 - перейти к сообщению
Уверен что они НЕ предназначены. Но почему появляются такие результаты, вот что интересно.
4. vitaliy_mad - 16 Января, 2010 - 16:23:52 - перейти к сообщению
Сравнение массивов довольно расплывчатое определение...
(Добавление)
мое мнение по этому поводу в том, что из за того что эти 2 оператора на рботают с массивами, то их результат непредсказуем, из-за внутреннего представления массивов интерпретатором.
5. Избранный - 16 Января, 2010 - 16:35:34 - перейти к сообщению
Цитата:
Сравнение массивов довольно расплывчатое определение...

Ну не знаю как это назвать, мне интересно почему такой результат. Я на этот вопрос в одном тесте наткнулся, тоже не понял смысла. Вот интересно почему такой результат, хочется разобраться.
6. Мелкий - 16 Января, 2010 - 16:38:13 - перейти к сообщению
Есть мнение, что сравнивается первый элемент.
7. vitaliy_mad - 16 Января, 2010 - 16:41:57 - перейти к сообщению
Мелкий пишет:
Есть мнение, что сравнивается первый элемент.

опыт показал истиность утверждения... Радость
8. Избранный - 16 Января, 2010 - 16:47:11 - перейти к сообщению
Наверно в этом и есть вся логика Улыбка
9. JustUserR - 16 Января, 2010 - 17:01:49 - перейти к сообщению
Наверное вся логика в том что массивы по историческим причинам сравниваются как и строки - сначала по длине (По количеству элементов) а потом по ASCII-номеру символа в строке (По числу в массиве) Если массивы состоят из строк все становится еще запутаннее Улыбка
10. EuGen - 18 Января, 2010 - 11:28:34 - перейти к сообщению
Не верно.
PHP 5.3.x
PHP:
скопировать код в буфер обмена
  1.  
  2. $a=array('apache'=>'web-server', 'tcp'=>'proto', 'zend'=>'ide');
  3. $b=array('linux'=>'os', 'cron'=>'daemon', 'intel'=>'cpu');
  4. echo("<pre>");
  5. var_dump($a > $b);
  6. echo("\n--\n");
  7. var_dump($a < $b);
  8.  

result:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. bool(false)
  3. --
  4. bool(false)
  5.  

Вполне ожидаемый результат при недопустимости операндов и оператора.
11. JustUserR - 18 Января, 2010 - 13:28:43 - перейти к сообщению
EuGen пишет:
Не верно
В приведенном вами примере уже не массивы а хеши (Ассоциативные массивы) и там наверное все еще запутанее - хотя может быть дело в том что с версии 5.3.* ядро усовершенствовали и теперь он не дает сравнивать массивы
12. EuGen - 18 Января, 2010 - 13:31:09 - перейти к сообщению
С точки зрения php это все равно остается массивом, я рассматривал общий случай.
Zend Engine действительно мог быть "усовершенствованым", но мне удавалось получать и true результатом подобного сравнения.
13. JustUserR - 18 Января, 2010 - 13:36:48 - перейти к сообщению
EuGen пишет:
Но мне удавалось получать и true результатом подобного сравнения
Значит в хеш-массиве ключи и элементы просто располагается в порядке по очереди друг за другом (По крайней мере как в Perl Улыбка - значит мое предположение про сравнение массивов как строк может быть верно (Хотя может быть сравниватся адреса указателей)
14. EuGen - 18 Января, 2010 - 13:40:03 - перейти к сообщению
Я имел ввиду не для приведенного выше примера, а вообще, на некоторых других массивах (не хочется воспроизводить снова).
Поэтому я убежден, что здесь не вступает в силу правило сравнения указателей либо вообще чего-либо (потому что как иначе можно объяснить false для любого сравнения в приведенном мною выше примере - если бы проделывалось сравнение действительно чего-либо "сравниваемого", то не могло быть $a<$b и $a>$b одновременно false. Конечно, я проверял и $a==$b - возвращает false на этом примере).
15. JustUserR - 18 Января, 2010 - 13:51:07 - перейти к сообщению
EuGen пишет:
Поэтому я убежден, что здесь не вступает в силу правило сравнения указателей либо вообще чего-либо
Ладно согласен Улыбка Вообще можно взять исходники и посмотреть в чем же дело - все-таки вряд ли значение сравнения берется с потолка Улыбка

 

Powered by ExBB FM 1.0 RC1