我有一个数据库表,其中包含我需要显示的图像。在我看来,我想为每个调出的结果显示最多10张图像。我已经设置了一个数组,其中包含20个图像,这些图像可用作每个结果的最大值(某些结果只有少量图像,甚至根本没有图像)。所以我需要一个循环来测试数组值是否为空,如果是,则移动到下一个值,直到它得到10个结果,或者它到达数组的末尾。
我想我需要做的是从测试结果中构建自己的第二个数组,然后使用该数组执行常规循环来显示我的图像。像
这样的东西<?php
$p=array($img1, $img2.....$img20);
for($i=0; $i<= count($p); $i++) {
if(!empty($i[$p])) {
...code
}
}
?>
如何告诉它将非空的数组值存储到新数组中?
答案 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