Выполнять петли 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;
?>