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 :: Глупый вопрос про "кэширование" в цикле foreach

 PHP.SU

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


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

> Без описания
Ticksy
Отправлено: 01 Мая, 2011 - 12:12:24
Post Id


Гость


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


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




У меня вопрос по примерно следующему коду:
PHP:
скопировать код в буфер обмена
  1. foreach(mysql_query("SELECT * FROM ...") as $row) {
  2. // do something...
  3. }

PHP при каждой итерации цикла будет делать запрос или вызовет функцию только при первой, а в следующих итерациях будет юзать этот самый "кэш"?

Кто не понял про "кэш", то я имею подобное:
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT...");
  2. foreach($result as $row) ...
 
 Top
molchun201
Отправлено: 01 Мая, 2011 - 12:58:12
Post Id



Посетитель


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


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




а при чём тут кэш? Однако
в $result - попадает массив данных из БД и этот массив и выводится, т.е. 1 раз происходит запрос


-----
Обрамляйте код тегами и читайте
 
 Top
Ticksy
Отправлено: 01 Мая, 2011 - 13:00:08
Post Id


Гость


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


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




molchun201 пишет:
а при чём тут кэш? Однако
в $result - попадает массив данных из БД и этот массив и выводится, т.е. 1 раз происходит запрос

Тоже самое происходит и при foreach(mysql_query("SELECT...") as $row)... ? Функция один раз вызывается при таком?
 
 Top
molchun201
Отправлено: 01 Мая, 2011 - 13:07:48
Post Id



Посетитель


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


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




да, смари сам mysql_query("SELECT...") as $row, т.е. результат запроса mysql_query("SELECT...") помещаем в $row <- он уже массив с данными и foreach'ом его перебираем и выводим


-----
Обрамляйте код тегами и читайте
 
 Top
Мелкий Супермодератор
Отправлено: 01 Мая, 2011 - 16:17:05
Post Id



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


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


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




Не понял
Народ, вы вообще читаете описание функций, которыми пользуетесь?
mysql_query никогда массив не возвращает.

Цитата:
про "кэширование" в цикле foreach

В случае, если фореаху передаётся функция, которая должна вернуть массив, эта функция вызовется только один раз, а фореах будет работать с тем, что эта функция вернула.
Так, в foreach (range(1,10) as $el) {} функция range будет вызвана только 1 раз.

(Отредактировано автором: 01 Мая, 2011 - 16:21:51)



-----
PostgreSQL DBA
 
 Top
molchun201
Отправлено: 01 Мая, 2011 - 16:20:06
Post Id



Посетитель


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


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




Мелкий ну дык понятно, он возвращает resource, а как ещё можно работать с resource, кроме как перегнать в массив? Однако

Цитата:
в $result - попадает массив

здесь я чуть ввёл в заблуждение автора Закатив глазки

в $result - попадает ресурс, затем его записываем в массив $row

вот так будет точнее Подмигивание

(Отредактировано автором: 01 Мая, 2011 - 16:25:41)



-----
Обрамляйте код тегами и читайте
 
 Top
Мелкий Супермодератор
Отправлено: 01 Мая, 2011 - 16:25:32
Post Id



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


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


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




molchun201 пишет:
а как ещё можно работать с resource, кроме как перегнать в массив?

Корректно с ресурсами могут работать только функции, для этого и предназначенные.
Для ресурсов mysql_query - это семейство mysql_fetch_*. Замечу, что не все из них возвращают массив, есть и такая штука как mysql_fetch_object


-----
PostgreSQL DBA
 
 Top
grefon
Отправлено: 01 Мая, 2011 - 16:51:18
Post Id



Частый посетитель


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


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




Ticksy, зачем Вы вообще используете цикл foreach при работе с базой данных? Этот цикл изначально создавался для других целей. Может тут все же лучше использовать while?


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Ticksy
Отправлено: 01 Мая, 2011 - 17:35:57
Post Id


Гость


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


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




Спасибо всем за ответы.

grefon пишет:
Ticksy, зачем Вы вообще используете цикл foreach при работе с базой данных? Этот цикл изначально создавался для других целей. Может тут все же лучше использовать while?

while($row = mysql_fetch_row())...? Потребление памяти уменьшится разве (вместе с ней и скорость увеличится значительно)?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB