完全为未来的学习者编辑这个问题。
我最初询问是否有一个while
函数可以替换下面的代码。我没有意识到while
没有像foreach
那样自动增加,所以没有。以下是使用array_slice()
或经典for
循环的更好解决方案的优秀答案。
foreach ($array as $key => $value) {
if ($key < 25) {
echo '<img src="'.$value.'/preview_image.jpg">';
}
}
答案 0 :(得分:2)
你仍然需要增加密钥,加上密钥必须统一才能工作。
Foreach适用于该套装,并且更能抵御该范围内的差距。迭代使用例如1,2和4作为键的集合,与foreach一起工作很好。
另一种方法可能是:
for ($i=0;$i<25;$i++) etc
这会立即检查结束条件,但不会考虑间隙,这可能会导致for循环本身出现额外的代码。
答案 1 :(得分:1)
您可以使用简单的 for loop
像这样for($i = 0; $i < 25; $i++)
{
echo '<img src="'.$array[$i].'/preview_image.jpg">';
}
答案 2 :(得分:1)
我喜欢array_slice()
解决方案。
此外,您应该使用控制结构的替代语法来显示HTML。
PHP: Alternative syntax for control structures - Manual
<?php
/* Logic Part */
$array = [...];
$array = array_slice($array, 0, 25);
// You MUST apply this function before echoing user inputs
// for the sake of security reasons.
function h($s)
{
return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
/* HTML Part */
?>
<!DOCTYPE html>
<meta charset="UTF-8">
<title>Example</title>
<div>
<?php foreach ($array as $value): ?>
<img src="<?=h($value)?>/preview_image.jpg">
<?php endforeach; ?>
</div>
答案 3 :(得分:1)
您实际上想要从文件中检索前24行。
有很多方法可以做到这一点。
这是一种方式:
$file = new SplFileObject($path);
$file->setFlags($file::DROP_NEW_LINE);
$head = new LimitIterator($file, 0, 24);
foreach ($head as $value) {
...
}
好处是你得到一个普通的变量来提供你需要的数据。这适用于 Decortator 模式,非常灵活。
如果文件少于24行(记录),则foreach将提前完成。
此代码也不会将整个文件读入内存,只能提供前24行。