Поиск…


Вступление

Петли являются фундаментальным аспектом программирования. Они позволяют программистам создавать код, который повторяется для определенного количества повторений или итераций . Количество итераций может быть явным (6 итераций, например) или продолжать до тех пор, пока не будет выполнено какое-либо условие («до тех пор, пока ад не замерзнет»).

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

Синтаксис

  • для (счетчик инициализации, счетчик тестов, счетчик прироста) {/ * code * /}
  • foreach (массив как значение) {/ * code * /}
  • foreach (массив как ключ => значение) {/ * code * /}
  • while (условие) {/ * code * /}
  • do {/ * code * /} while (condition);
  • anyloop {continue; }
  • anyloop {[ anyloop ...] {продолжить int; }}
  • anyloop {break; }
  • anyloop {[ anyloop ...] {break int; }}

замечания

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

  • for
  • while
  • do..while
  • foreach

Для управления этими циклами доступны инструкции continue и break .

за

Оператор for используется, когда вы знаете, сколько раз вы хотите выполнить оператор или блок операторов.

Инициализатор используется для установки начального значения для счетчика числа итераций цикла. Для этой цели может быть объявлена ​​переменная, и ее традиционно называют $i .

Следующий пример повторяется 10 раз и отображает числа от 0 до 9.

for ($i = 0; $i <= 9; $i++) {
    echo $i, ',';
}

# Example 2
for ($i = 0; ; $i++) {
  if ($i > 9) {
      break;
  }
  echo $i, ',';
}

# Example 3
$i = 0;
for (; ; ) {
    if ($i > 9) {
        break;
    }
    echo $i, ',';
    $i++;
}

# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);

Ожидаемый результат:

0,1,2,3,4,5,6,7,8,9,

для каждого

Оператор foreach используется для циклического преобразования массивов.

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

В следующем примере отображаются элементы в назначенном массиве.

$list = ['apple', 'banana', 'cherry'];

foreach ($list as $value) {
    echo "I love to eat {$value}. ";
}

Ожидаемый результат:

I love to eat apple. I love to eat banana. I love to eat cherry. 

Вы также можете получить доступ к ключу / индексу значения, используя foreach:

foreach ($list as $key => $value) {
    echo $key . ":" . $value . " ";
}

//Outputs - 0:apple 1:banana 2:cherry

По умолчанию $value является копией значения в $list , поэтому изменения, сделанные внутри цикла, впоследствии не будут отображаться в $list .

foreach ($list as $value) {
    $value = $value . " pie";
}
echo $list[0]; // Outputs "apple"

Чтобы изменить массив в цикле foreach , используйте оператор & для назначения $value по ссылке. Важно unset переменную впоследствии, чтобы повторное использование $value другом месте не перезаписывало массив.

foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
    $value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"

Вы также можете изменить элементы массива в цикле foreach , ссылаясь на ключ массива текущего элемента.

foreach ($list as $key => $value) {
    $list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"

перерыв

Ключевое слово break немедленно завершает текущий цикл.

Как и оператор continue , break прерывает выполнение цикла. Однако, в отличие от оператора continue , break приводит к немедленному завершению цикла и не выполняет оператор условного выражения еще раз.

$i = 5;
while(true) {
    echo 120/$i.PHP_EOL;
    $i -= 1;
    if ($i == 0) {
        break;
    }
}

Этот код будет производить

24
30
40
60
120

но не будет выполнять случай, когда $i равно 0, что приведет к фатальной ошибке из-за деления на 0.

Оператор break также может использоваться для выхода из нескольких уровней циклов. Такое поведение очень полезно при выполнении вложенных циклов. Например, чтобы скопировать массив строк в строку вывода, удалив любые # символы, пока строка вывода не будет равна 160 символам

$output = "";
$inputs = array(
    "#soblessed #throwbackthursday",
    "happy tuesday",
    "#nofilter",
    /* more inputs */
);
foreach($inputs as $input) {
    for($i = 0; $i < strlen($input); $i += 1) {
        if ($input[$i] == '#') continue;
        $output .= $input[$i];
        if (strlen($output) == 160) break 2; 
    }
    $output .= ' ';
}

Команда break 2 немедленно прекращает выполнение как внутренних, так и внешних циклов.

делать пока

Оператор do...while выполнит блок кода хотя бы один раз - он повторит цикл, пока условие истинно.

Следующий пример будет увеличивать значение $i по крайней мере один раз, и он будет продолжать увеличивать переменную $i до тех пор, пока она имеет значение меньше 25;

$i = 0;
do {
    $i++;
} while($i < 25);

echo 'The final value of i is: ', $i;

Ожидаемый результат:

The final value of i is: 25

Продолжить

Ключевое слово continue останавливает текущую итерацию цикла, но не завершает цикл.

Как и оператор break оператор continue находится внутри тела цикла. При выполнении оператор continue приводит к немедленному переходу на цикл.

В следующем примере цикл выводит сообщение на основе значений в массиве, но пропускает указанное значение.

$list = ['apple', 'banana', 'cherry'];

foreach ($list as $value) {
    if ($value == 'banana') {
        continue;
    }
    echo "I love to eat {$value} pie.".PHP_EOL;
}

Ожидаемый результат:

I love to eat apple pie.
I love to eat cherry pie.

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

Фрукты цвет Стоимость
яблоко красный 1
Банан желтый 7
вишня красный 2
виноград зеленый 4

Чтобы сделать только пироги из фруктов, стоимость которых меньше 5

$data = [
    [ "Fruit" => "Apple",  "Color" => "Red",    "Cost" => 1 ],
    [ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
    [ "Fruit" => "Cherry", "Color" => "Red",    "Cost" => 2 ],
    [ "Fruit" => "Grape",  "Color" => "Green",  "Cost" => 4 ]
];

foreach($data as $fruit) {
    foreach($fruit as $key => $value) {
        if ($key == "Cost" && $value >= 5) {
            continue 2;
        }
        /* make a pie */
    }
}

Когда выполняется оператор continue 2 , выполнение немедленно возвращается к $data as $fruit продолжая внешний цикл и пропуская все остальные коды (включая условное значение во внутреннем цикле.

в то время как

Оператор while выполнит блок кода, если до тех пор, пока тестовое выражение истинно.

Если тестовое выражение истинно, тогда будет выполняться блок кода. После выполнения кода тестовое выражение снова будет оценено и цикл будет продолжаться до тех пор, пока тестовое выражение не окажется ложным.

Следующий пример повторяется до достижения суммы до 100 до прекращения.

$i = true;
$sum = 0;

while ($i) {
    if ($sum === 100) {
        $i = false;
    } else {
        $sum += 10;
    }
}
echo 'The sum is: ', $sum;

Ожидаемый результат:

The sum is: 100


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow