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 :: Версия для печати :: Особенности цикла FOR
Форумы портала PHP.SU » » Вопросы новичков » Особенности цикла FOR

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

1. romantik2011 - 08 Августа, 2011 - 17:08:47 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $str = 'Hello';
  4.  
  5. for($i=0,$k = strlen($str); $i<$k; $i++) {
  6.         echo $str[$i]. ' ';
  7. }
  8.  
  9. ?>
  10.  
  11.  


Меня интересует вот это место:

Слышал что постоянный вызов в цикле одной и той же функции является расходом динамической памяти.
Здесь функция strlen вызывается только один раз или при каждой итерации?
Так вернее писать?
2. Мелкий - 08 Августа, 2011 - 17:17:32 - перейти к сообщению
Только один раз, да, так вернее.
3. SAD - 08 Августа, 2011 - 17:23:27 - перейти к сообщению
[]
4. romantik2011 - 08 Августа, 2011 - 17:28:48 - перейти к сообщению
Только один раз при такой записи внутри цикла ФОР?
5. SAD - 08 Августа, 2011 - 17:37:04 - перейти к сообщению
только 1
6. romantik2011 - 08 Августа, 2011 - 17:45:44 - перейти к сообщению
То есть только в первой итерации выполнится первое условие, то есть начнется отсчёт с нуля в первой итерации и вызовется лишь один единственный раз функция strlen?
На другом форуме просто сказали что постоянно, а не 1 раз.
7. Мелкий - 08 Августа, 2011 - 17:47:03 - перейти к сообщению
romantik2011, собственно, можете и поэкспериментировать:
PHP:
скопировать код в буфер обмена
  1. function foo() {
  2. echo "запустились<br>";
  3. return 50;
  4. }
  5. for($i=0,$k = foo(); $i<$k; $i++) {
  6.         echo $i;
  7. }


А вот, кстати, обращение к строке, как массиву - некорректно будет для utf8 и прочего мультибайта работать.
8. SAD - 08 Августа, 2011 - 17:48:14 - перейти к сообщению
при такой записи for($i=0,$k = strlen($str); $i<$k; $i++) - один раз
при такой записи for($i=0,$i < strlen($str); $i++) - каждый раз

 

Powered by ExBB FM 1.0 RC1