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 :: Помогите чайнику поиск в array [2]

 PHP.SU

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


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

> Без описания
armancho7777777 Супермодератор
Отправлено: 02 Января, 2012 - 18:56:19
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Слышь, ты достал уже.
Для особо одарённых перефразирую:
тот код вернёт то, что и этот:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.      if (!isset($arr['id']) || $arr['id'] != $id) continue;
  3.       return $arr;
  4.  

(Добавление)
Этот код:



PHP:
скопировать код в буфер обмена
  1.  if (!isset($arr['id']) || $arr['id'] != $id) break;
  2. return $arr;


будет работать дольше, чем этот:

PHP:
скопировать код в буфер обмена
  1.  
  2.       if ($arr['id'] == $id){
  3.  
  4.               $fanc_result = $arr;
  5.  
  6.               break;
  7.  
  8.           }else{
  9.  
  10.               $fanc_result = false;  
  11.  
  12.           }
  13.  
  14. return $fanc_result;
  15.  

(Отредактировано автором: 02 Января, 2012 - 19:02:29)

 
 Top
Самогонщик
Отправлено: 02 Января, 2012 - 19:05:14
Post Id



Посетитель


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


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




Я вижу очевидную ошибку в чужих рассуждениях, поэтому предлагаю выяснить как оно на самом деле.

Из предыдущих комментариев, я понял, что эти две функции будут возвращать одинаковый результат ("тот код вернёт то, что и этот:")

PHP:
скопировать код в буфер обмена
  1. function arrSearch($id, $array) {
  2.    foreach ($array as $arr) {
  3.       if (!isset($arr['id']) || $arr['id'] != $id) continue;
  4.       return $arr;
  5.    }
  6.    return false;
  7. }


PHP:
скопировать код в буфер обмена
  1. function arrSearch($id, $array) {
  2.    foreach ($array as $arr) {
  3.      if (!isset($arr['id']) || $arr['id'] != $id){
  4.        return $arr;
  5.      }
  6.    }
  7.    return false;
  8. }

Я прав? если не прав, представь "тот код вернёт то, что и этот:" в виде целых функций, чтобы не возникало неоднозначности.
 
 Top
OrmaJever Модератор
Отправлено: 02 Января, 2012 - 19:18:24
Post Id



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


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


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




ненадо спорить, вот вам код и всё.
PHP:
скопировать код в буфер обмена
  1. function arrSearch($id, $array) {
  2.    foreach($array as $arr) {
  3.       if ($arr['id'] == $id) return $arr;
  4.    }
  5.    return false;
  6. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Самогонщик
Отправлено: 02 Января, 2012 - 19:29:14
Post Id



Посетитель


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


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




armancho7777777 пишет:
будет работать дольше, чем этот:
Абсолютно не согласен.
1. Первый код должен содержать контине, а не бряк.
2. Обе реализации сделают одинаковое число итераций по циклу.
3. Твоя реализация содержит бессмысленную строку $fanc_result = false; т.к. проще сделать присвоение при инициализации.
4. Единственный минус реализации Саныча в том, что можно было сделать проще условие, но сути это не меняет.

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

OrmaJever пишет:
ненадо спорить, вот вам код и всё.

http://forum.php.su/topic.php?fo...14154#1325514154 не?

Спор вообще идёт вот по этому утверждению:
armancho7777777 пишет:
Т.е. использовать "break", а не "continue", чтобы не проходить цикл дальше, а оборвать его при совпадении.
Автору указали на ошибку, но он не согласен. Т.е. есть два мнения и одно из них неправильное. Наша благородная цель выяснить, какое же.
 
 Top
Саныч Модератор
Отправлено: 02 Января, 2012 - 19:33:13
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Самогонщик пишет:
Согласен. Но когда я писал "ещё использовать" я совершенно не это имел введу, но думаю меня правильно поняли.
Конечно правильно. Просто мне ваши слова напомнили тот момент.

armancho7777777 пишет:
Конструкция continue так же, как и break, работает только "в паре" с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой
Это так, но разговор-то вобще был не об этом...

Все же лучший, как мне кажеться, вариант предложил OrmaJever. Убрав лишние скобки получаем 5 строчек кода.
PHP:
скопировать код в буфер обмена
  1. function arrSearch($id, $array) {
  2.    foreach ($array as $arr)
  3.       if ($arr['id'] == $id) return $arr;
  4.    return false;
  5. }


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Самогонщик
Отправлено: 02 Января, 2012 - 19:48:32
Post Id



Посетитель


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


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




Саныч пишет:
Вдруг его там нет, получим ошибку.
Я почему то всегда думал, что получим null. И мой интерпретатор со мной согласен. И получается код из моего первого комментария. Скобки, переносы и имена по вкусу.
 
 Top
Саныч Модератор
Отправлено: 02 Января, 2012 - 19:55:21
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Самогонщик пишет:
Я почему то всегда думал, что получим null.
Да точно, был не прав. Я думал что будет ошибка (вернее примечание), как при обращении к несуществующему ключу.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB