Php 在foreach循环中嵌套值

Php 在foreach循环中嵌套值,php,Php,我有一系列循环,我需要得到正确传递的值。基本上,我有一个来自joomla hikashop的产品对象。为了让我的显示器按我希望的方式工作,我必须将图像分离到一个单独的数组中,并使用array\u unique过滤重复图像,因为hikashop将默认值分配给每个产品变体,并在显示器上为每个变体获取重复图像。我需要显示器显示每个过滤后的图像,但随后将$char\u id分配给这些图像,以便在单击时更改主产品图像 因此,我的目的是确保图像显示正确,但它只是为每个图像拾取$characteristic-

我有一系列循环,我需要得到正确传递的值。基本上,我有一个来自joomla hikashop的产品对象。为了让我的显示器按我希望的方式工作,我必须将图像分离到一个单独的数组中,并使用
array\u unique
过滤重复图像,因为hikashop将默认值分配给每个产品变体,并在显示器上为每个变体获取重复图像。我需要显示器显示每个过滤后的图像,但随后将
$char\u id
分配给这些图像,以便在单击时更改主产品图像

因此,我的目的是确保图像显示正确,但它只是为每个图像拾取
$characteristic->variant\u characteristic\u id
中的第一个键,而不是为每个图像获取唯一的键

恐怕我有点不知所措了,谢谢

这是我的代码块:

if ($this->element->variants):
    $i = 0;
    foreach($this->element->variants as $variant):
        foreach($variant->characteristics as $k => $characteristic):
            $char_id = $characteristic->variant_characteristic_id;
            $cat_id = $k;
            $char_name = $characteristic->characteristic_value;
            foreach($variant->images as $key => $image):
                $images[$i] = array($key => $image);
                $i++;
            endforeach;
            $images = array_map("unserialize", array_unique(array_map("serialize", $images)));
        endforeach;
    endforeach;
    echo '<pre>'.print_r($images).'</pre>';
    foreach($images as $image):
        echo '
            <div class="product-thmb-group">
                <img id="hikashop_child_image_'.$char_id.'" class="hikashop_child_image" src="' . $this->image->uploadFolder_url . $image[0]->file_path . '" alt="hikashop_child_image_' . $char_id . '"  />
                <span class="product-thmb-title">'.$char_name.'</span>
            </div>';
    endforeach;
endif;
if($this->element->variants):
$i=0;
foreach($this->element->variants as$variant):
foreach($variant->characteristics as$k=>$characteristic):
$char\u id=$characteristic->variant\u characteristic\u id;
$cat_id=$k;
$char\u name=$characteristic->characteristic\u value;
foreach($variant->image as$key=>$image):
$images[$i]=数组($key=>$image);
$i++;
endforeach;
$images=array_-map(“非序列化”,array_-unique(array_-map(“序列化”),$images));
endforeach;
endforeach;
回显“”。打印($images)。“”;
foreach($images作为$image):
回声'
图像->上传文件夹\u url$图像[0]->文件路径。'“alt=“hikashop\u child\u image”$字符id。”"  />
“.$char_name”
';
endforeach;
endif;

如果您还提供了一个示例有效负载,该示例将有所帮助,有效负载是任何内容 $this->element->variants

无论如何,发现问题很容易,您正在覆盖 循环每次迭代时,
$char\u id、$cat\u id、$char\u name

对于
$variant->characteristics
中的每个项目,您还将对所有图像进行一次迭代,这可能不是您想要的。 没有看到您试图解析的有效负载,我只能猜测,但我认为 您想做的是以下几点:

foreach($images as $image => $meta) {
    echo "Image src: ", $image,
         " Id: ", $meta['id'], " Name: ", $meta['name'], "\n";
}
然后您应该能够在阵列中循环

foreach($images as $data) {
    echo "Image src: ", $data['image'],
         " Id: ", $data['id'], " Name: ", $data['name'], "\n";
}
或者如果你保留了上面的可选任务


这应该做什么?
array\u-map(“非序列化”,array\u-unique(array\u-map(“序列化”),$images)))
天哪,斯科特,我不知道我该怎么做才能让你的代码更具可读性?@Halcyon这就是获取图像数组并过滤副本的方法paylod非常大,所以我在页面上打印了你是对的,这是一个非常多的问题。只要每个变体正好等于一个特征和一个im那么我的例子应该可以用了。当我把你的代码放进去的时候,我得到了一个意外的错误,$images=[];我做错了什么?不,你可能使用的是旧版本的PHP。试着用array()替换[]。并且“$images[$image]=[”应该变成“$images[$image]=array(“后跟a”);”而不是“];“我对有效负载的输出进行了放大,使其更易于阅读,请转至
foreach($images as $data) {
    echo "Image src: ", $data['image'],
         " Id: ", $data['id'], " Name: ", $data['name'], "\n";
}