Php интервал в цикле
Цикл for самый сложный цикл в PHP. Он ведёт себя так же, как и в языке C. Синтаксис цикла for следующий:
for (expr1; expr2; expr3) statement
Первое выражение ( expr1 ) всегда вычисляется (выполняется) только один раз в начале цикла.
В начале каждой итерации оценивается выражение expr2 . Если оно принимает значение true , то цикл продолжается и выполняются вложенные операторы. Если оно принимает значение false , выполнение цикла заканчивается.
В конце каждой итерации выражение expr3 вычисляется (выполняется).
Каждое из выражений может быть пустым или содержать несколько выражений, разделённых запятыми. В expr2 все выражения, разделённые запятыми, вычисляются, но результат берётся из последнего. Если выражение expr2 отсутствует, это означает, что цикл будет выполняться бесконечно. (PHP неявно воспринимает это значение как true , так же, как в языке C). Это может быть не так бесполезно, как вы могли подумать, так как часто необходимо прервать цикл, используя условный оператор break вместо использования выражения в цикле for , которое принимает истинное значение.
Рассмотрим следующие примеры. Все они отображают числа от 1 до 10:
for ( $i = 1 ; ; $i ++) if ( $i > 10 ) break;
>
echo $i ;
>
Конечно, первый пример кажется самым хорошим (или, возможно, четвёртый), но вы можете обнаружить, что возможность использовать пустые выражения в циклах for может стать удобной во многих случаях.
PHP также поддерживает альтернативный синтаксис с двоеточием для циклов for .
for (expr1; expr2; expr3): statement . endfor;
Перебор массивов как показано ниже — это обычное дело для многих пользователей.
/*
* Это массив с некоторыми данными, которые мы хотим изменить
* при работе цикла.
*/
$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);
?php
for( $i = 0 ; $i < count ( $people ); ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>
Вышеприведённый код может работать медленно, так как размер массива вычисляется в каждой итерации. Поскольку размер не меняется, цикл может быть легко оптимизирован с помощью промежуточной переменной, в которую будет записан размер массива, вместо повторяющихся вызовов функции count() :
$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);
?php
for( $i = 0 , $size = count ( $people ); $i < $size ; ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>
Как замедлить цикл php?
Есть цикл do while, я хочу чтобы он срабатывал 10 раз, но интервал между срабатываниями можно было установить, как это сделать?
Оценить 8 комментариев
Андрей Федоров: мне кажется парень не понимает концепт php, и хочет визуализировать процесс чего-либо.
Мне нужно, чтобы через определенные интервалы появлялись ряд чисел, на экране, Например 5(проходит1с), 7(проходит 1с), 2(проходит 1с) и так далее. Как это лучше сделать, нужно именно на php
alh_2: php выполняется единожды на сервере ПЕРЕД началом прогрузки страницы и дальнейших действий, и в конечном итоге в браузер приходит вывод от php. То, что вы хотите реализовать нужно делать на клиентском языке (например javascript)
Никак. PHP — серверный язык и выполняет код на сервере. Вам в браузер приходит только результат выполнения ВСЕГО скрипта. Правильный вариант — делать это через клиентский язык (javascript, например). Если нужно только через PHP — то тут нужен также клиентский язык, чтобы отправлял запросы на сервер (ajax). Если вам нужно от и до сделать на PHP — то могу предложить записывать статус в куки и перезагружать каждый раз страницу, интервал придется реализовать через опять-же клиентский язык.
Идеальный вариант: сформировать нужные данные с помощью PHP и передать их в JavaScript код (с помощью json, например, ну либо своим костылем), в котором уже и производить визуальный вывод.
Для цикла в PHP: Как сделать интервал цикла?
Вы должны использовать array_chunk() здесь. Позвольте мне показать пример с 100 записями, с первыми 20, 21-40, 41-60 и так далее.
$input_array = range(1, 100); $chunks = array_chunk($input_array, 20);
Вот как будет выглядеть массив $chunks:
Array ( [0] => Array ( [0] => 1 [1] => 2 . [9] => 10 ), [1] => Array ( [0] => 21 [1] => 22 . [2] => 40 ) . . [4] => Array ( [0] => 81 [1] => 82 . [19] => 100 )
Теперь переберите ваш массив $chunks.
foreach ($chunks as $k => $chunk) < /* $k = 0 means first 20 items */ if ($k == 0) < // your code here >foreach ($chunk as $i) < echo $i; echo '
'; > >
Если вы выполняете какую-либо задачу даже после заданного диапазона [200], вы можете использовать это:
$range = 200; for($i=1; $idb->save(); if ($i%$range == 0) < //. >>
в основном здесь вы звоните $this->db->save() каждый раз до конца цикла и просто используя 201 401 601 801, чтобы сделать что-то еще, например, напечатать текущее значение $i
если вы хотите выполнять отдельные задачи после каждого диапазона:
$range = 200; $fn = 0; for($i=1; $i > function fn_0() < //. >function fn_201() < //. >function fn_401() < //. >function fn_601() < //. >function fn_801() < //. >
всегда полезно логически разделять ваши функции.
Также, если вам нужно просто сохранить 1000 раз, не используйте цикл для вставки. Вместо этого попробуйте пакетную вставку, что-то вроде вставки нескольких строк через массив php в mysql.
Для цикла в PHP: Как сделать интервал цикла?
Вы должны использовать array_chunk () здесь. Позвольте мне показать пример с 100 записями, с первыми 20, 21-40, 41-60 и так далее.
$input_array = range(1, 100); $chunks = array_chunk($input_array, 20);
Вот как будет выглядеть массив $ chunks:
Array ( [0] => Array ( [0] => 1 [1] => 2 . [9] => 10 ), [1] => Array ( [0] => 21 [1] => 22 . [2] => 40 ) . . [4] => Array ( [0] => 81 [1] => 82 . [19] => 100 )
Теперь переберите ваш массив $ chunks.
foreach ($chunks as $k => $chunk) < /* $k = 0 means first 20 items */ if ($k == 0) < // your code here >foreach ($chunk as $i) < echo $i; echo '
'; > >
Если вы выполняете какую-либо задачу даже после заданного диапазона [200], вы можете использовать это:
$range = 200; for($i=1; $idb->save(); if ($i%$range == 0) < //. >>
В основном, здесь вы вызываете $this->db->save() каждый раз до конца цикла и просто используете 201 401 601 801 для выполнения чего-то другого, например, для печати текущего значения $i
Если вы хотите выполнять отдельные задачи после каждого диапазона:
$range = 200; $fn = 0; for($i=1; $i > function fn_0() < //. >function fn_201() < //. >function fn_401() < //. >function fn_601() < //. >function fn_801() < //. >
Всегда полезно логически разделять ваши функции.
Также, если вам нужно просто сохранить 1000 раз, не используйте цикл для вставки. Вместо этого попробуйте выполнить пакетную вставку, например, вставить несколько строк с помощью PHP массив в MySQL
Вы можете использовать array_splice . Если вам нужно отправить массив с определенным интервалом, это лучший вариант.
Я реализовал это в своем коде для отправки уведомлений на 1000 идентификаторов одновременно.
$sendIds = array_splice($your_array,0,199);