Выполнять циклы PHP, пока конец массива ИЛИ не достигнет определенного числа итераций? - PullRequest
10 голосов
/ 01 сентября 2011

Я хочу получить один массив в качестве входных данных, отфильтровать значения из него и вывести в качестве другого массива.Функция должна проходить до x итераций.

Например, если бы я хотел вывести все значения из ввода, я бы использовал:

<?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 до конца массива или пока функция не достигнет определенного числа итераций?

Ответы [ 6 ]

15 голосов
/ 01 сентября 2011

Используйте петлю while:

$i = 0;
$limit = 10;
$count = count($array);

while ($i < $limit && $i < $count) {
   $data = $array[$i];
   // your code here
   ++$i;
}
11 голосов
/ 01 сентября 2011

Вы на правильном пути - вы можете выйти из цикла 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; 
1 голос
/ 03 сентября 2018
            <?php foreach($usersinglevideodata1 as $userkey=>$uservalue){
                  for($i = 0; $i < 5; $i++){if($uservalue['com_video'.$i.''] !=""){ if ($Count < 3){?>
            <div class="col-sm-4">
                <iframe width="100%" height="120" src="https://www.youtube.com/embed/<?php echo youtube_id($uservalue['com_video'.$i.'']);?>" frameborder="0" allowfullscreen></iframe>
            </div>
            <?php $Count++;}else{break;}}}?>
          <?php }}?>

Примечание : Вы на правильном пути - вы можете выйти из цикла foreach, когда достигнете своего счета. Вы используете foreach для итерации по всему массиву, и если вы никогда не достигнете заявленного максимального значения, вы обработаете весь массив. Но если вы достигнете максимума, выпрыгните из петли.

1 голос
/ 01 сентября 2011
$max_iterations = 100;

for ($i=1;$i <=$max_iterations;$i++)
{
    if ($i <= count($array))
        //do what u need
    else
        break;      
}
0 голосов
/ 08 сентября 2011
<?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;
?>
0 голосов
/ 01 сентября 2011

Вы знакомы с 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; 
...