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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сравнение массивов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Помогите понять логику
Избранный
Отправлено: 16 Января, 2010 - 16:19:01
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




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)


Почему выпадают такие результаты?

(Отредактировано автором: 16 Января, 2010 - 16:24:04)

 
 Top
vitaliy_mad
Отправлено: 16 Января, 2010 - 16:21:12
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




а какие должны быть? Вы уверены что операторы < и > предназначены для массивов?

здесь фукцнии работы с массивами http://php.su/functions/?cat=array

(Отредактировано автором: 16 Января, 2010 - 16:21:54)

 
 Top
Избранный
Отправлено: 16 Января, 2010 - 16:23:13
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Уверен что они НЕ предназначены. Но почему появляются такие результаты, вот что интересно.
 
 Top
vitaliy_mad
Отправлено: 16 Января, 2010 - 16:23:52
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Сравнение массивов довольно расплывчатое определение...
(Добавление)
мое мнение по этому поводу в том, что из за того что эти 2 оператора на рботают с массивами, то их результат непредсказуем, из-за внутреннего представления массивов интерпретатором.

(Отредактировано автором: 16 Января, 2010 - 16:27:13)

 
 Top
Избранный
Отправлено: 16 Января, 2010 - 16:35:34
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Цитата:
Сравнение массивов довольно расплывчатое определение...

Ну не знаю как это назвать, мне интересно почему такой результат. Я на этот вопрос в одном тесте наткнулся, тоже не понял смысла. Вот интересно почему такой результат, хочется разобраться.
 
 Top
Мелкий Супермодератор
Отправлено: 16 Января, 2010 - 16:38:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Есть мнение, что сравнивается первый элемент.


-----
PostgreSQL DBA
 
 Top
vitaliy_mad
Отправлено: 16 Января, 2010 - 16:41:57
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Мелкий пишет:
Есть мнение, что сравнивается первый элемент.

опыт показал истиность утверждения... Радость
 
 Top
Избранный
Отправлено: 16 Января, 2010 - 16:47:11
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Наверно в этом и есть вся логика Улыбка
 
 Top
JustUserR
Отправлено: 16 Января, 2010 - 17:01:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Наверное вся логика в том что массивы по историческим причинам сравниваются как и строки - сначала по длине (По количеству элементов) а потом по ASCII-номеру символа в строке (По числу в массиве) Если массивы состоят из строк все становится еще запутаннее Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
EuGen Администратор
Отправлено: 18 Января, 2010 - 11:28:34
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Не верно.
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.  

Вполне ожидаемый результат при недопустимости операндов и оператора.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 18 Января, 2010 - 13:28:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




EuGen пишет:
Не верно
В приведенном вами примере уже не массивы а хеши (Ассоциативные массивы) и там наверное все еще запутанее - хотя может быть дело в том что с версии 5.3.* ядро усовершенствовали и теперь он не дает сравнивать массивы


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
EuGen Администратор
Отправлено: 18 Января, 2010 - 13:31:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




С точки зрения php это все равно остается массивом, я рассматривал общий случай.
Zend Engine действительно мог быть "усовершенствованым", но мне удавалось получать и true результатом подобного сравнения.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 18 Января, 2010 - 13:36:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




EuGen пишет:
Но мне удавалось получать и true результатом подобного сравнения
Значит в хеш-массиве ключи и элементы просто располагается в порядке по очереди друг за другом (По крайней мере как в Perl Улыбка - значит мое предположение про сравнение массивов как строк может быть верно (Хотя может быть сравниватся адреса указателей)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
EuGen Администратор
Отправлено: 18 Января, 2010 - 13:40:03
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Я имел ввиду не для приведенного выше примера, а вообще, на некоторых других массивах (не хочется воспроизводить снова).
Поэтому я убежден, что здесь не вступает в силу правило сравнения указателей либо вообще чего-либо (потому что как иначе можно объяснить false для любого сравнения в приведенном мною выше примере - если бы проделывалось сравнение действительно чего-либо "сравниваемого", то не могло быть $a<$b и $a>$b одновременно false. Конечно, я проверял и $a==$b - возвращает false на этом примере).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 18 Января, 2010 - 13:51:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




EuGen пишет:
Поэтому я убежден, что здесь не вступает в силу правило сравнения указателей либо вообще чего-либо
Ладно согласен Улыбка Вообще можно взять исходники и посмотреть в чем же дело - все-таки вряд ли значение сравнения берется с потолка Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB