首页 > 解决方案 > 需要重复的复杂的 nexted foreach

问题描述

我想用我的对象做一个 foreach 并在最后创建一个带有srcset.

Srcset 的格式应该是这样的:

<img srcset="elva-fairy-320w.jpg 320w,
             elva-fairy-480w.jpg 480w,
             elva-fairy-800w.jpg 800w"
     sizes="(max-width: 320px) 280px,
            (max-width: 480px) 440px,
            800px"
     src="elva-fairy-800w.jpg" alt="Elva dressed as a fairy">

https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

我的输出格式如下:

stdClass Object
(
    [images0] => stdClass Object
        (
            [mediaManagerOrUrl] => 0
            [mediaManagerImagesSubform] => stdClass Object
                (
                    [image] => images/1600x400.jpg
                    [realSize] => 1600
                    [size] => 1200
                    [slot] => 1600
                )

        [urlImagesSubform] => stdClass Object
            (
                [url] => 
                [realSize] => 
                [size] => 
            )

    )

[images1] => stdClass Object
    (
        [mediaManagerOrUrl] => 0
        [mediaManagerImagesSubform] => stdClass Object
            (
                [image] => images/1200x400.jpg
                [realSize] => 1200
                [size] => 1000
                [slot] => 1000
            )

        [urlImagesSubform] => stdClass Object
            (
                [url] => 
                [realSize] => 
                [size] => 
            )

    )

[images2] => stdClass Object
    (
        [mediaManagerOrUrl] => 0
        [mediaManagerImagesSubform] => stdClass Object
            (
                [image] => images/800x400.jpg
                [realSize] => 800
                [size] => 800
                [slot] => 700
            )

        [urlImagesSubform] => stdClass Object
            (
                [url] => 
                [realSize] => 
                [size] => 
            )

    )

[images3] => stdClass Object
    (
        [mediaManagerOrUrl] => 0
        [mediaManagerImagesSubform] => stdClass Object
            (
                [image] => images/400x400.jpg
                [realSize] => 400
                [size] => 480
                [slot] => 400
            )

        [urlImagesSubform] => stdClass Object
            (
                [url] => 
                [realSize] => 
                [size] => 
            )

    )

)

最初,我从使用嵌套的 foreach 语句开始。然而,我随后意识到我实际上需要拉出所有 4 个图像,并且使用嵌套的 foreaches 一次只能允许一个,例如,它正在连续处理所有图像部分。

然后我尝试使用这种语法。

foreach ($params->get('images') as $someImages) {
    echo '<img srcset="' . $someImages->mediaManagerImagesSubform->image . " " . $someImages->mediaManagerImagesSubform->realSize . ',"
            sizes="(max-width:' . $someImages->mediaManagerImagesSubform->size . ') ' . $someImages->mediaManagerImagesSubform->slot . ', 
            src="' . $defaultImage . '" alt="'. $altText . '">';
}

这是非常复杂的,没有工作。谁能帮助我了解如何实现这一目标?我开始认为我需要以某种方式将数据触发到数组中,从而将其从嵌套语法中分离出来,并在调用它之前将其完全放在首位。这样会更明智吗?

为了使事情进一步复杂化,我认为我需要进行计数,以便我可以添加逗号,但不能在最后一个实例中添加。

标签: phpforeach

解决方案


我的最终答案是使用两个不同的 foreach 语句,$i然后使用我的变量的完整路径。

<?php 
    $i = 0;

    echo '<img srcset="';
    foreach ($images as $image) {
        echo $image->mediaManagerImagesSubform->image . " " . $image->mediaManagerImagesSubform->realSize . "w";
        echo ', ';
    }
    echo '" size="';
    foreach ($images as $image) {
        echo '(max-width: ';
        echo $image->mediaManagerImagesSubform->size . 'px) ' . $image->mediaManagerImagesSubform->slot . "px";
        echo ', ';
    }
    echo '" src="' . $defaultImage . '" alt="'. $altText . '">';
?>

推荐阅读