Php интервал в цикле

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 )
);

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 )
);

for( $i = 0 , $size = count ( $people ); $i < $size ; ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>

Источник

Как замедлить цикл php?

Есть цикл do while, я хочу чтобы он срабатывал 10 раз, но интервал между срабатываниями можно было установить, как это сделать?

Оценить 8 комментариев

aliencash

Stasgar

Андрей Федоров: мне кажется парень не понимает концепт php, и хочет визуализировать процесс чего-либо.

aliencash

Мне нужно, чтобы через определенные интервалы появлялись ряд чисел, на экране, Например 5(проходит1с), 7(проходит 1с), 2(проходит 1с) и так далее. Как это лучше сделать, нужно именно на php

65536

Stasgar

alh_2: php выполняется единожды на сервере ПЕРЕД началом прогрузки страницы и дальнейших действий, и в конечном итоге в браузер приходит вывод от php. То, что вы хотите реализовать нужно делать на клиентском языке (например javascript)

Stasgar

Никак. 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); 

Источник

Читайте также:  Html table with border and header
Оцените статью