Выполнять петли PHP до конца массива ИЛИ достигает определенного количества итераций?
Я хочу получить один массив в качестве входных данных, фильтровать значения из него и выводить как другой массив. Функция должна прокручиваться до x
итераций.
Например, если бы я хотел вывести all значения из ввода, я бы использовал:
<?php
$i=0;
foreach ($array as $data) {
if ($data['type'] != 'some_value') {
$formatted_array[$i] = $data;
$i++;
}
}
return $formatted_array;
Но если $array
имел большой индекс, $formatted_array
был бы больше, чем мне нужно. Я попытался использовать цикл for
с несколькими условиями, но, похоже, он застрял в бесконечном цикле.
Я не разработчик по профессии, поэтому логику трудно понять. Я не получаю ошибок, поэтому трудно понять, где именно я ошибаюсь.
Как я могу выполнять петли PHP до конца массива или до тех пор, пока функция не достигнет определенного количества итераций?
Ответы
Ответ 1
Вы на правильном пути - вы можете выйти из цикла foreach
, когда достигнете своего счета. Вы используете foreach
для итерации по всему массиву, и если вы никогда не достигнете указанного максимального количества, вы будете обрабатывать весь массив. Но если вы достигнете максимума, выпрыгните из цикла.
$i = 0;
// Don't allow more than 5 if the array is bigger than 5
$maxiterations = 5;
foreach ($array as $data) {
if ($i < $maxiterations) {
if ($data['type'] != 'some_value') {
$formatted_array[$i] = $data;
$i++;
}
}
else { // Jump out of the loop if we hit the maximum
break;
}
}
return $formatted_array;
Ответ 2
Используйте цикл while
:
$i = 0;
$limit = 10;
$count = count($array);
while ($i < $limit && $i < $count) {
$data = $array[$i];
// your code here
++$i;
}
Ответ 3
$max_iterations = 100;
for ($i=1;$i <=$max_iterations;$i++)
{
if ($i <= count($array))
//do what u need
else
break;
}
Ответ 4
Вы знакомы с оператором break
?
Пользовательский цикл foreach, а также поддерживает переменную счетчика каждый раз, когда вы вводите код внутри условия. Если вы достигнете нужного числа, то счетчик достигнет определенного значения, вырвется из цикла.
<?php
$i=0;
foreach ($array as $data) {
if ($data['type'] != 'some_value') {
$formatted_array[$i] = $data;
$i++;
if($i>$maxAllowedElements) // here $i can serve as the counter and you can define //$maxAllowedElements to whatever value you like.
break;
}
}
return $formatted_array;
Ответ 5
<?php
$counter = 0;
$new_array = array();
while(count($new_array) <= $max_elements) {
if($array[$counter]['type'] !== 'some_value') {
$new_array[] = $array[$counter];
}
}
return $new_array;
?>