php如何循环遍历数组直到满足条件?

时间:2012-02-01 19:58:52

标签: php arrays for-loop

我有一个数据库表,其中包含我需要显示的图像。在我看来,我想为每个调出的结果显示最多10张图像。我已经设置了一个数组,其中包含20个图像,这些图像可用作每个结果的最大值(某些结果只有少量图像,甚至根本没有图像)。所以我需要一个循环来测试数组值是否为空,如果是,则移动到下一个值,直到它得到10个结果,或者它到达数组的末尾。

我想我需要做的是从测试结果中构建自己的第二个数组,然后使用该数组执行常规循环来显示我的图像。像

这样的东西
<?php 
  $p=array($img1, $img2.....$img20);

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

如何告诉它将非空的数组值存储到新数组中?

5 个答案:

答案 0 :(得分:3)

你可以做点什么:

$imgs = array(); $imgs_count = 0;
foreach ( $p as $img ) {
    if ( !empty($img) ) {
        $imgs[] = $img;
        $imgs_count++;
    }
    if ( $imgs_count === 10 ) break;
}

答案 1 :(得分:2)

您只需调用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]
}

答案 2 :(得分:1)

$new_array[] = $p[$i];

$p[$i]存储到$new_array的下一个元素中(a.k.a array_push() )。

答案 3 :(得分:1)

您是否考虑过在SQL查询中限制结果?

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

通过这种方式,您最多可获得10个非空的结果。

答案 4 :(得分:0)

ẁhile循环可能是您正在寻找的http://php.net/manual/en/control-structures.while.php