PHP For(某些数组键)循环

时间:2017-07-02 00:27:31

标签: php for-loop foreach

完全为未来的学习者编辑这个问题。

我最初询问是否有一个while函数可以替换下面的代码。我没有意识到while没有像foreach那样自动增加,所以没有。以下是使用array_slice()或经典for循环的更好解决方案的优秀答案。

foreach ($array as $key => $value) {
    if ($key < 25) {
        echo '<img src="'.$value.'/preview_image.jpg">';
    }
}

4 个答案:

答案 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行。