PHP为foreach循环的某些但不是所有迭代增加了价值

PHP为foreach循环的某些但不是所有迭代增加了价值,php,arrays,Php,Arrays,初学者程序员在这里 我有一个目录中的图片,这些图片被推送到一个数组中 $pressImages = scandir('img/press'); 然后切片以删除系统文件 $slice = array_slice($pressImages, 3); 然后运行一个循环,将每个图像打印到网页上 foreach ($slice as $image) { echo "<div class='press list-item'><img src='img/press/$image' /&

初学者程序员在这里

我有一个目录中的图片,这些图片被推送到一个数组中

$pressImages = scandir('img/press');
然后切片以删除系统文件

$slice = array_slice($pressImages, 3);
然后运行一个循环,将每个图像打印到网页上

foreach ($slice as $image) {
 echo "<div class='press list-item'><img src='img/press/$image' /></div>";
}
foreach($slice as$image){
回声“;
}
我想将锚定标记添加到循环的前四个迭代中(每个链接都是唯一的),但不添加到其他的。我正在努力学习如何将指令整合到尽可能少的数量。我需要在这里创建两个单独的循环吗?我想我会创建两个目录,一个用于有链接的图像,另一个用于没有链接的图像,每个目录都有自己的foreach循环,但我的直觉表明可能有一种更有效的方法

提前谢谢你的帮助


**一些很棒的建议大家再次感谢,学到了很多。我自己无法尝试这些,所以我依赖于可视化。我一定会尽快选择答案

更新

您可以像这样使用foreach键(请参阅):

foreach($key=>$image作为切片){
如果($key>3){
回声“;
}否则{
回声“;
}
}

希望这有帮助

只需添加一个递增的计数器,并使用if块:

$count = 0;
foreach ($slice as $image) {
    $count++;
    if($count <= 4){
        echo 'your link html here';
    }else{
        echo 'your non link html here';
    }
}

每次链接都是一样的吗

foreach ($slice as $count => $image) {
    if($count > 3){
        echo "<div class='press list-item'><a href='#'><img src='img/press/$image' /></a></div>";
    }else{
        echo "<div class='press list-item'><img src='img/press/$image' /></div>";
    }
}
foreach($count=>$image作为切片){
如果($count>3){
回声“;
}否则{
回声“;
}
}
如果我能正确理解你的问题,这对你很有用。

你可以通过以下方式实现“功能性风格”:

使用的原因是您可以提供多个数组并并行遍历它们


这是

此外,您不必在数组切分后赋值。使用与切分该数组相同的$pressImages,以减少variables@Rohitshah谢谢,非常有帮助。我没有想到这只是使用
数组\u切片的一种替代方法,并且没有回答问题,这是关于更改数组中前四项的html更新了我的答案!我喜欢我脑海中的这个答案。但是我应该使用指定的锚定标记,这样图像才是可点击的,而不是不同的文件路径。您将如何使用独特的锚点HREF实现这一点?(编辑OP以表示锚定标签)每个链接都会不同,我会在最初的问题中添加这一点,感谢您的澄清!和Saumyas的想法一样,我想我喜欢这个。但是URL是唯一的。你们两个如何看待将URL添加到一个数组中,并使用一个计数器变量来选择与当前迭代相关的正确链接路径(迭代2选择索引1中的链接)。这是一种有趣的攻击方式。我们可以使用上面提到的相同计数器来处理链接是唯一的这一事实吗?请参阅我对thmspl答案的评论。谢谢大家!@fd1247,如果您有两个数组,并且您的方法是:
n
长度数组中的链接
n
从图像数组中选择第一个
n
图像,那么您根本不需要计数器。第二个循环将只运行一次。我猜
继续是指,而不是
中断
$count = 4;
foreach ($slice as $image) {
    if($count--){
        echo 'your link html here';
        break;
    }
    echo 'your non link html here';
}
foreach ($slice as $count => $image) {
    if($count > 3){
        echo "<div class='press list-item'><a href='#'><img src='img/press/$image' /></a></div>";
    }else{
        echo "<div class='press list-item'><img src='img/press/$image' /></div>";
    }
}
array_walk($images, function ($image, $_, &$count) {
    $count += 1;

    $image = "<img src='img/press/$image'/>";

    if ($count <= 4) {
        $image = "<a href='#'>$image</a>";
    }

    echo "<div class='press list-item'>$image</div>", PHP_EOL;
}, 0);
array_map(function ($image, $link) {
    $image = "<img src='img/press/$image'/>";

    if ($link) {
        $image = "<a href='$link'>$image</a>";
    }

    // Or you can return string here and array_map will 
    // create an array of all resulting images.
    echo "<div class='press list-item'>$image</div>", PHP_EOL;
}, $images, $links);