php как перебрать массив, пока не будет выполнено условие? - PullRequest
1 голос
/ 01 февраля 2012

У меня есть таблица базы данных с изображениями, которые мне нужно отобразить.На мой взгляд, я хотел бы отображать до 10 изображений для каждого вызванного результата.Я настроил массив из 20 изображений, которые доступны в качестве максимума для каждого результата (в некоторых результатах будет только несколько изображений или даже вообще нет).Поэтому мне нужен цикл, который проверяет, является ли значение массива пустым, и если это так, чтобы перейти к следующему значению, пока оно не получит 10 результатов или не достигнет конца массива.Я думаю, что мне нужно сделать, это создать себе второй массив из результатов теста, а затем использовать этот массив для выполнения регулярного цикла для отображения моих изображений.Что-то вроде

<?php 
  $p=array($img1, $img2.....$img20);

  for($i=0; $i<= count($p); $i++) {
    if(!empty($i[$p])) {
    ...code
    }
  }
?>

Как мне сказать, чтобы хранить значения массива, которые не являются пустыми, в новый массив?

Ответы [ 5 ]

3 голосов
/ 02 февраля 2012

вы можете сделать что-то вроде:

$imgs = array(); $imgs_count = 0;
foreach ( $p as $img ) {
    if ( !empty($img) ) {
        $imgs[] = $img;
        $imgs_count++;
    }
    if ( $imgs_count === 10 ) break;
}
2 голосов
/ 02 февраля 2012

Вы можете просто вызвать array_filter(), чтобы получить только непустые элементы из массива. array_filter() может принять функцию обратного вызова, чтобы определить, что удалить, но в этом случае empty() будет оцениваться как FALSE, и обратный вызов не требуется. Любое значение, которое оценивает empty() == TRUE, будет просто удалено.

$p=array($img1, $img2.....$img20);
$nonempty = array_filter($p);

// $nonempty contains only the non-empty elements.

// Now dow something with the non-empty array:
foreach ($nonempty as $value) {
   something();
}

// Or use the first 10 values of $nonempty
// I don't like this solution much....
$i = 0;
foreach ($nonempty as $key=>$value) {
  // do something with $nonempty[$key];
  $i++;
  if ($i >= 10) break;
}

// OR, it could be done with array_values() to make sequential array keys:
// This is a little nicer...
$nonempty = array_values($nonempty);
for ($i = 0; $i<10; $i++) {
   // Bail out if we already read to the end...
   if (!isset($nonempty[$i]) break;

   // do something with $nonempty[$i]
}
1 голос
/ 02 февраля 2012

Задумывались ли вы об ограничении результатов в запросе sql?

select * from image where img != '' limit 10

Таким образом, вы всегда получаете до 10 не пустых результатов.

1 голос
/ 02 февраля 2012
$new_array[] = $p[$i];

Сохранит $p[$i] в следующем элементе $new_array (он же array_push()).

0 голосов
/ 02 февраля 2012

A ẁhile цикл может быть то, что вы ищете http://php.net/manual/en/control-structures.while.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...