php - 需要重复的复杂的 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 . '">';
}
这是非常复杂的,没有工作。谁能帮助我了解如何实现这一目标?我开始认为我需要以某种方式将数据触发到数组中,从而将其从嵌套语法中分离出来,并在调用它之前将其完全放在首位。这样会更明智吗?
为了使事情进一步复杂化,我认为我需要进行计数,以便我可以添加逗号,但不能在最后一个实例中添加。
解决方案
我的最终答案是使用两个不同的 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 . '">';
?>
推荐阅读
- javascript - 将变量从 Symfony/Twig 传递给 vue
- python - GitHub使用python和漂亮的汤获取提交数
- vba - VBA 替换打开文档中的文件(word/excel 除外)
- django - 为什么尝试从 heroku 获取图像时出现 404 错误?
- flutter - 颤振/飞镖中对象池模式的最佳实践是什么?
- python - 将类导入同一包python中的另一个文件夹
- yaml - PhpStorm 中的错误 YAML 缩进 - .editorconf
- python - 在 qt 对话框的不同选项卡中循环 lineEdits
- node.js - 为什么 expressjs 将表单数据显示为字符串
- c++ - 在运行时编译用户制作的 c++ 代码作为扩展是一个好主意吗?