1

我不是高级 php 编码器,所以我需要一些帮助。

我正在尝试使用指向完整图像和缩略图的链接来回显列表项。

这是期望的结果:

<li>
    <a href="fullimagepath1">
        <img src="thumnailpath1" />
    </a>
</li>
<li>
    <a href="fullimagepath2">
        <img src="thumnailpath2" />
    </a>
</li>
<li>
    <a href="fullimagepath3">
        <img src="thumnailpath3" />
    </a>
</li>
...

这是我正在使用的代码

    <?php
        $images = rwmb_meta( 'product_gallery', 'type=image&size=press-thumb' );
    $fullimages = rwmb_meta( 'product_gallery', 'type=image&size=productfull-thumb' );
            foreach ( $fullimages as $fimages)
            foreach ( $images as $image)
                {
                    echo "<li><a class='thumb' href='{$fimages['url']}'><img src='{$image['url']}' /></a></li>";

    } ?>

问题是我得到了缩略图,但乘以实际结果的数量。如果我的画廊有 3 个缩略图,则结果将是 9 个缩略图,如果我有 5 个,则会得到 25 个。

如何修复代码?提前致谢!

4

4 回答 4

1

这是因为这条线foreach ( $fullimages as $fimages)触发了内部循环。

由于您可能有 3 个图像并且两个数组都包含三个项目数组,因此循环将在一个更大的循环内运行 3 次,该循环也将执行 3 次。所以你有9个项目。

在你的代码上

foreach ( $fullimages as $fimages) //Because of this loop next statement executes
foreach ( $images as $image) {
  echo "<li><a class='thumb' href='{$fimages['url']}'><img src='{$image['url']}' /></a></li>";
}

你可能想要的是什么?

foreach ( $fullimages as $k => $fimages) {
                      // ^ Get the index of the array
  echo "<li><a class='thumb' href='{$fimages['url']}'>
       <img src='{$images[$k]['url']}' /></a></li>";
                       // ^ Use that key to find the thumbnail from $images array
}
于 2013-07-05T09:24:22.583 回答
0

试试这个代码

foreach ( $fullimages as $fimages)
{
    foreach ( $images as $image)
                echo "<li><a class='thumb' href='{$fimages['url']}'><img src='{$image['url']}' /></a></li>";

} ?>
于 2013-07-05T09:24:45.400 回答
0

你可以使用for并迭代

for ($i=0;$i<count($images);$i++){
    echo $images[$i]['url'], $fullimages[$i]['url'];
}

或使用array_map

array_map(function($image, $fullimage){
    echo $image['url'], $fullimage['url'];
}, $images, $fullimages);
于 2013-07-05T09:25:27.620 回答
0

我建议存储这样的图像:

$images = array(
 'fullpath' => '...'
 'thumbpath' => '...'    
)

而不是两个单独的数组。并且只循环一个数组。

或使用像next($array),current($array)这样的迭代器函数同时迭代两个数组。

于 2013-07-05T09:29:56.183 回答