多维数组:内部数组和内部数组内爆

时间:2013-12-13 19:31:57

标签: php arrays multidimensional-array implode

使用这个样本多维数组(包含颜色的调色板,其中包含各自的阴影),假设我想在内嵌列表中显示颜色(以逗号分隔),如果适用,还可以显示其各自的颜色括号中的阴影,也在内嵌(逗号分隔)列表中。

我可以很容易地破坏内部数组(阴影),但无法弄清楚如何使用外部数组(颜色),因为它包含必须为每种颜色运行的阴影数组。

我已经看到有几种解决方案来破坏多维数组,但这些似乎并不需要为每个数组运行一个可能的内部数组。也许还有另一种方法可以用逗号分隔条目?

虽然我在谈论这个问题,但有没有办法用'和'替换内爆字符串的最后一个逗号?

提前致谢。

$sql =  "SELECT DISTINCT colour_id, colour_nm, colour_url
            FROM palettecolours
            INNER JOIN colour ON colourid = colour_id
            WHERE paletteid = '$palette_id'";
while ($row = mysqli_fetch_array($result))
{
    $colour = '<a href = "/colour/' . $row['colour_name'] . '">' . $row['colour_url'] . '</a>';
    $colours[$row['colour_id']] = array('colour' => $colour, 'shades' => array());
}

$sql =  "SELECT colourid, shade_name, shade_url
            FROM palettecolours
            INNER JOIN shade ON shadeid = shade_id
            WHERE paletteid = '$palette_id'";
while ($row = mysqli_fetch_array($result))  
{
    $shade = '<a href = "/shade/' . $row['shade_name'] . '">' . $row['shade_url'] . '</a>';
    $colours[$row['colourid']]['shades'][] = array('shade' => $shade);
}

<?php foreach ($colours as $colour): ?>
<?php echo $colour['colour']; ?>
<?php if(!empty($colour['shades'])) { ?>(<?php echo implode(", ", $colour['shades']); ?>)<?php } ?>
<?php endforeach; ?>

当前显示: - 红色(洋红色,勃艮第,深红色)蓝绿色黄色(埃及棉,木兰)白色(软月亮)

期望的结果: - 红色(洋红色,勃艮第,深红色),蓝色,绿色,黄色(埃及棉,木兰),白色(软月亮)

2 个答案:

答案 0 :(得分:0)

递归函数怎么样?像

这样的东西
function array_implode_recursive($glue, $data, $before = '(', $after = ')') {
    //Loop through every child and check whether it is an array or not and implode it if so
    foreach($data as &$element) {
        if (is_array($element)) {
            $element = $before . array_implode_recursive($glue, $element) . $after;
        }
    }
    //It's really safe to erase this variable as sometimes PHP has fun with them
    unset($element);

    return implode($glue, $data);
}

像这样使用

$mydata = implode_recursive(', ', $data);
$mydata = implode_recursive(', ', $data, '[', ']');

希望有所帮助

答案 1 :(得分:0)

既然你知道你的阵列是什么样的,并且看起来有钥匙,你可以尝试类似于我所做的事情here