Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> foreach vs for 
:(
    Опции темы
NLspieler
Дата 11.5.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Для прохода по массиву с натуральными ключами от нуля до n, можно использовать такую конструкцию:

Код

foreach ($array as $value)
{
    echo $value ;
}


Или такую:

Код

$count = count ($array) ;

for ($n=0 ; $n < $count ; $n++)
{
    echo $array[$n] ;
}


Что будет лучше и быстрее работать или же это дело вкуса?
PM MAIL   Вверх
enof
Дата 11.5.2009, 15:21 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



NLspieler, Как вы думаете, foreach создали чтобы показать, какой он медленный и неудобный и тем самым призвать юзать for?
PM MAIL ICQ Skype   Вверх
NLspieler
Дата 11.5.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



 smile Не знаю. Вот и спрашиваю.

Недавно встречал на форуме высказывание, что нужно юзать foreach, 
только если без него действительно никак не обойтись.
Иначе же лучше for.

Писал это кажется bars80080, а он как я заметил, х..ню не напишет.


Пробовал измерить так:

Код

$time = time() ;

//скрипт

$time = time() - $time ;


Результат во всех скриптах равен нулю. Может есть аналог time() но для дольных частей секунды?




Это сообщение отредактировал(а) NLspieler - 11.5.2009, 15:46
PM MAIL   Вверх
enof
Дата 11.5.2009, 15:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Если вы не знаете как замерить работу скрипта, не пофиг ли, for или foreach?
Одинаково они примерно работают, foreach быстрее даже зачастую.

Добавлено через 1 минуту и 15 секунд
Угу, посмотрел, у меня foreach примерно раза в два быстрее работает.

Добавлено через 2 минуты и 26 секунд
Не стоит на этом зацикливаться, на кавычках, циклах и т.д., когда, например, одним кривым запросом к базе можно свести все старания на нет.
PM MAIL ICQ Skype   Вверх
nerezus
Дата 11.5.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



NLspieler, правильно писать так:
mov ebx, 0
lbl: inc ebx
cmp ebx,10
jnz lbl

ведь это еще круче и непонятнее, чем использовать for для задач, для которых нужно юзать foreach.




--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
bars80080
Дата 11.5.2009, 16:32 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



да я говорил, и буду говорить, ибо надо следовать вселенскому предначертанию вещей

нет, конечно, некоторые любят чесать правой рукой левое ухо через голову, но стоит ли специально?

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

что касается:
Цитата(enof @  11.5.2009,  15:49 Найти цитируемый пост)
Угу, посмотрел, у меня foreach примерно раза в два быстрее работает.

то это всё из области: а вы с картошкой или вареньем горчицу любите? я в своё время проверял, у меня явно выходило быстрее на for для порядковых массивов, но массивы там были не простые, а циклы были вложенные. т.е. надо смотреть в конкретной ситуации

вопрос надо ли, должен возникнуть только в случае если проект уже начинает скрипеть от нагрузки

а до тех пор, всё-таки лучше пользоваться в разных вариантах специально предназначенными для того функциями
PM MAIL WWW   Вверх
NLspieler
Дата 11.5.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



enof, как правильно производить замер времени работы скрипта в точности до дольных частей секунды?
PM MAIL   Вверх
nerezus
Дата 11.5.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

вопрос надо ли, должен возникнуть только в случае если проект уже начинает скрипеть от нагрузки
 Смысла нет, все равно не поможет.

http://en.wikipedia.org/wiki/Bottleneck_(engineering)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
bars80080
Дата 11.5.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NLspieler @  11.5.2009,  16:32 Найти цитируемый пост)
как правильно производить замер времени работы скрипта в точности до дольных частей секунды? 

http://www.php.ru/manual/function.microtime.html

PM MAIL WWW   Вверх
enof
Дата 11.5.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



bars80080, вы соглашаетесь с тем, что вы за for, и тут же приводите аргументы в пользу стандартных средств. smile 
Цитата(bars80080 @  11.5.2009,  17:32 Найти цитируемый пост)
я в своё время проверял

вот именно, что в свое время. Многие приводят эти тесты и сейчас в док-во слов, типа юзай одинарные кавычки, и ваша программа будет работать в два раза быстрее. smile 
Это я к тому, что многие тесты уже не актуальны. К тому же сейчас разработчики пхп наконец-то зашевелились по поводу производительности.

NLspieler, эти тесты ничего не стоят, можно только примерно посмотреть, как обстоят дела.

nerezus, Там про что,в двух словах? С английским у меня не очень =(
PM MAIL ICQ Skype   Вверх
NLspieler
Дата 11.5.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Попробовал провести тестирование одного скриптика, оказалось, что иногда он выполняется быстрее, иногда медленние. 
Иногда скорость отличается в сотни раз.   smile 
PM MAIL   Вверх
SneG0K
Дата 11.5.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Тестировать скрипты нужно в идеальных условиях... Интересно посмотреть на результат, если во время тестов одновременно записывается три болванки, компилируется прога в VS 2008, играет музыка, работает антивир и еще прочая лабудень, и когда работает только один сервер... За этим следить то надо!
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



SneG0K, Бесполезно. Убивал иксы, апач, мускул и все ненужную дребедень. Все равно разброс огромный во времени.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Дык а скрипт работает с БД?
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Ну речь же идет о быстродействии языковых конструкций. Зачем здесь apache, mysql, оконная система?
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Ну а смысл экономить на языковых конструкциях? Есть смысл оптимизировать запросы, но нет смысла оптимизировать операторы языка... Хотите производительности, цепляйте кластера!

Добавлено через 2 минуты и 4 секунды
Хотите еще большей производительности - работайте на уровне железа! (Анреал)
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Я тебе про Фому, ты мне про Ерему.
Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.
По поводу этого
Цитата(SneG0K @  11.5.2009,  19:06 Найти цитируемый пост)
идеальных условиях

вендузятники идут курить.
Да все равно, создание этих "идеальных условий" бессмысленно.
Цитата(SneG0K @  11.5.2009,  19:50 Найти цитируемый пост)
Хотите еще большей производительности - работайте на уровне железа! (Анреал) 

угу, спаяй сам себе сайт.
PM MAIL ICQ Skype   Вверх
NLspieler
Дата 11.5.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



enof, прочитал твою ссылку тест.
Автор утверждает, что foreach медленние чем for. ???  smile  

Может быть и правда провести собственное тестирование?

А с разбросом результатов думаю можно боротся так:
Пытаемся создать максимально "идеальные" условия.
Проводим тест n раз. 
Результаты записываем, сортируем, 
откидываем по 40% слишком больших и слишком маленьких результатов.
Из оставшихся вычисляем среднее арифметическое. 
PM MAIL   Вверх
enof
Дата 11.5.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(NLspieler @  11.5.2009,  20:34 Найти цитируемый пост)
Автор утверждает, что foreach медленние чем for. ???  smile  

Следующее предложение за ссылкой тоже нужно было прочитать. Эти тесты проводились примерно после выхода php4.
Цитата(enof @  11.5.2009,  18:07 Найти цитируемый пост)
Это я к тому, что многие тесты уже не актуальны


Насчет тестирования думал недавно, соберусь как-нибудь проведу.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)
угу, спаяй сам себе сайт. 

 smile 
Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)

вендузятники идут курить.

Если про сервера, то винду ф топку!!!

Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)

Да все равно, создание этих "идеальных условий" бессмысленно.

А нагрузка на процессор? Хочешь получить больше процессорного времени - убей конкурентов!!!
Цитата(enof @  11.5.2009,  18:11 Найти цитируемый пост)
Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.

Только ради интереса, в боевых условиях использовать это мозголюбство не стоит, только больше проблем возникнет
PM WWW Skype   Вверх
enof
Дата 11.5.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(SneG0K @  11.5.2009,  21:03 Найти цитируемый пост)
А нагрузка на процессор? Хочешь получить больше процессорного времени - убей конкурентов!!!

я про то и говорю. Как ты оконную систему в винде уберешь? никак.
У меня иксы сжирают ~15%, в винде не знаю насклько оконная система прожорлива. Вот, я могу х остановить, а ты в винде хочешь не хочешь, а окошками любуйся, хоть они и не нужны. smile 
В тестах сравнивается что-то с чем-то, главное чтобы в одинаковых условиях, а какие они, впринципе не так уж и важно.
Цитата(SneG0K @  11.5.2009,  21:03 Найти цитируемый пост)

Если про сервера, то винду ф топку!!!

да и на десктопе тоже.
PM MAIL ICQ Skype   Вверх
SneG0K
Дата 11.5.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Цитата(enof @  11.5.2009,  19:16 Найти цитируемый пост)
В тестах сравнивается что-то с чем-то, главное чтобы в одинаковых условиях, а какие они, впринципе не так уж и важно.

Я просто изложил свое предположение, почему у NSpieler'a получились разные результат от одного и того же кода
PM WWW Skype   Вверх
NLspieler
Дата 11.5.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Протестировал таким кодом:

Код

<?php

$array = array ('e', 'e', 'f', 'g', 'b', 'v', 'd', 'c', 'v', 'f', 'g', 'r', 'tg', 'e', 'r', 'd', 'f', 'g', 't', 'r', 'd', 'e', 'c', 'v', 'f', 'g', 'h',) ;
$r1 = '' ;
$r2 = '' ;

$time_start = microtime(1);

foreach ($array as $value)
{
    $r1 = $r1 . $value ;
}

$time_end = microtime(1);
$time0 = $time_end - $time_start;

$time_start = microtime(1);

$count = count ($array) ;

for ($n=0 ; $n < $count ; $n++)
{
    $r2 = $r2 .  $array[$n] ;
}

$time_end = microtime(1);
$time1 = $time_end - $time_start;


echo "foreach $time0 for $time1 \n" ;
echo ($time0/$time1) . "\n" ;
echo "$r1 and $r2" ;

?>


Получилось, что foreach немного быстрее, 90-95% времени по сравнению с for

Это сообщение отредактировал(а) NLspieler - 11.5.2009, 20:50
PM MAIL   Вверх
enof
Дата 11.5.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Тогда уж замерял бы в цикле что ли и среднее потом выводил.

Это сообщение отредактировал(а) enof - 11.5.2009, 20:56
PM MAIL ICQ Skype   Вверх
nerezus
Дата 11.5.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



enof, может быть затем, что одинаковые усилия, потраченные на оптимизацию конструкций и SQL-запросов дадут разницу в выигрыше производительности в несколько тысяч раз?

Добавлено через 2 минуты и 3 секунды
Цитата

Все эти тесты ради интереса, любопытно же все-таки, когда делать нечего.
 Допустим статистическая погрешность 5%. Ты выиграешь 0.01%. Как ты это узнаешь?
Естественно на реальном приложении если мерять, т.к. никому не нужны результаты, которые не повлияют на практику.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
NLspieler
Дата 11.5.2009, 21:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Пропустил через цикл, 600000 интераций. Результат ~82%
Короче, объявляю foreach бесспорным победителем.

Это сообщение отредактировал(а) NLspieler - 11.5.2009, 21:15
PM MAIL   Вверх
NLspieler
Дата 11.5.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



nerezus, а что вы понимаете под оптимизацией sql запросов?
Это типо, что бы они вытаскивали только нужные поля таблицы, а не все?
PM MAIL   Вверх
bars80080
Дата 11.5.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(enof @  11.5.2009,  17:07 Найти цитируемый пост)
Многие приводят эти тесты 

в жизни не проводил тестов, у меня была конкретная ситуация по обработке выборки из БД. кусок замеряемого цикла дал преимущества for


а что я там противосмысленного сказал?
PM MAIL WWW   Вверх
enof
Дата 12.5.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Цитата(bars80080 @  11.5.2009,  23:50 Найти цитируемый пост)
а что я там противосмысленного сказал? 

Цитата(bars80080 @  11.5.2009,  17:32 Найти цитируемый пост)

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

ну так foreach и является той самой "функцией", облегчающей труд кодера.
Или я чего-то не понимаю?
PM MAIL ICQ Skype   Вверх
Рыжий
Дата 12.5.2009, 03:32 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



foreach должна быть быстрее, хотя бы потому, что в ней не определяется дополнительная переменная $i для счета.

+ в for() каждый раз проверяется условие, стоящее на втором месте: for($i=0;$i<100;$i++). 
Если говорить о массивах - в for часто допускают ошибку: for($i=0;$i<count($array);$i++) - Получается при каждом прохождении цикла, не только проверятеся условие <, но и выполняется функция count.

Все это относится к очень мелкой и преждевременной оптимизации и большой роли не играет, имхо.
PM MAIL ICQ   Вверх
bars80080
Дата 12.5.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(enof @  12.5.2009,  01:35 Найти цитируемый пост)
ну так foreach и является той самой "функцией", облегчающей труд кодера.

дык, for тоже является соответствующей функцией, созданной для облегчения труда


Цитата(Рыжий @  12.5.2009,  03:32 Найти цитируемый пост)
хотя бы потому, что в ней не определяется дополнительная переменная $i для счета.

как же он тогда вообще считает? 

вот у меня вопрос тестировщикам, а вы пробовали на крупных массивах сравнивать for и foreach? к примеру, двумерный массив, содержащий строки из БД, ну хотя бы 100-10000, при этом в каждой записи 5-10 полей в том числе со строковыми элементами до 250 символов?
PM MAIL WWW   Вверх
Рыжий
Дата 12.5.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(bars80080 @  12.5.2009,  08:44 Найти цитируемый пост)
как же он тогда вообще считает? 

Хм.  smile  А резве foreach не перемещается по массиву от предыдущего к следующему элементу, пока не достигнет конца?
В то время как for:
Код

for($i=0;$i<5;$i++){ }
echo "Переменная \$i = ".$i;


А по поводу тестов: 
http://derekgallo.com/2007/04/19/for-vs-foreach/
Тут есть foreach, while и другие
И наверное самый полный: http://www.phpbench.com/
PM MAIL ICQ   Вверх
bars80080
Дата 12.5.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Рыжий @  12.5.2009,  13:07 Найти цитируемый пост)
А резве foreach не перемещается по массиву от предыдущего к следующему элементу, пока не достигнет конца?

а как он  будет перемещаться от элемента к элементу? или думаешь, массив в памяти хранится сплошным куском?

PM MAIL WWW   Вверх
NLspieler
Дата 12.5.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



Кажется, если я не ошибаюсь, foreach может пройтись и по такому массиву:

Код

$array[12] = 'aasd' ;
$array[45] = 'aasd' ;
$array[122] = 'aasd' ;
$array[425] = 'aasd' ;
$array['aasd'] = 'aasd' ;
$array['asdd'] = 'aasd' ;
$array['aggd'] = 'aasd' ;

?

for же этого сделать не сможет без дополнительного гемора. 

PM MAIL   Вверх
bars80080
Дата 12.5.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(NLspieler @  12.5.2009,  13:53 Найти цитируемый пост)
Кажется, если я не ошибаюсь, foreach может пройтись и по такому массиву:

вообще-то, foreach как раз и предназначен для проходу по такого рода массивам. вот в этой ситуации использовать for можно только с большой оправдательной речью
PM MAIL WWW   Вверх
Рыжий
Дата 12.5.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(bars80080 @  12.5.2009,  12:39 Найти цитируемый пост)
а как он  будет перемещаться от элемента к элементу? или думаешь, массив в памяти хранится сплошным куском?

Нет, foreach не вводит новую переменную в php, из мануала:
Цитата
On each loop, the value of the current element is assigned to $value and the internal array pointer is advanced by one (so on the next loop, you'll be looking at the next element). 


Это как использование функции next()/each(), которые просто возвращают элемент массива, и перемещают указатель на следующий.
PM MAIL ICQ   Вверх
bars80080
Дата 12.5.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



да причём здесь ввод дополнительной переменной? я говорю о физической памяти. вот у нас поле ячеек объёмом в 200-3000 мегабайт оперативной памяти, какие из них содержат непосредственно данные массива? неужели пхп кладёт их рядком друг за другом и ориентируется всего по двум флагам начала и конца, двигая их как в регистре? да я не уверен, что даже данные одного элемента массива занимают упорядоченный набор байт. полюбому для массива составлен список адресов и вводится итерационная переменная на каком-то глубоком уровне, C или ещё ниже, которая перебирает все адреса и извлекает через них данные

PM MAIL WWW   Вверх
vasac
Дата 13.5.2009, 11:16 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Где-где, а на Винграде потока столь феерического бреда не ожидал.
Давайте ещё в очередной раз подискутируем насчёт print vs echo.
PM WWW   Вверх
Рыжий
Дата 15.5.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 2
Всего: 20



Цитата(bars80080 @  12.5.2009,  16:59 Найти цитируемый пост)
да причём здесь ввод дополнительной переменной? я говорю о физической памяти. вот у нас поле ячеек объёмом в 200-3000 мегабайт оперативной памяти, какие из них содержат непосредственно данные массива? неужели пхп кладёт их рядком друг за другом и ориентируется всего по двум флагам начала и конца, двигая их как в регистре? да я не уверен, что даже данные одного элемента массива занимают упорядоченный набор байт. полюбому для массива составлен список адресов и вводится итерационная переменная на каком-то глубоком уровне, C или ещё ниже, которая перебирает все адреса и извлекает через них данные

Дык я о том же - foreach не объявляет переменную в php окружении, насколько мне известно много переменных в php влияют на  скорость выполнения.

Цитата(vasac @  13.5.2009,  10:16 Найти цитируемый пост)
Где-где, а на Винграде потока столь феерического бреда не ожидал.
Давайте ещё в очередной раз подискутируем насчёт print vs echo. 

угу, что-то мы далеко в лес зашли  smile 
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.