2013-12-13 33 views
1

使用此示例多维数组(包含颜色的调色板,其中包含颜色,其中又包含其各自的阴影),假设我想显示在内爆列表中的颜色(逗号 - 分隔)以及(如果适用)各自的括号中的阴影,也以分解(以逗号分隔)列表。多维数组:implode外部和内部数组

我可以很容易地爆破内部数组(阴影),但不知道如何使用外部数组(颜色),因为它包含必须贯穿每种颜色的阴影数组。

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

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

在此先感谢。

$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; ?> 

当前显示: - 红色(品红色,勃艮第,深红)蓝绿色黄色(埃及棉,玉兰)白(软文)

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

回答

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, '[', ']'); 

希望它可以帮助

+0

对不起,真的很厚,但你能告诉我如何将这个应用到上面的例子,因为我有一些问题得到它的工作。 $数据的相应部分是分别给外部和内部数组的函数吗? –

+0

在你的情况下,最好这样做:http://pastebin.com/afiF9WHg –

+0

谢谢。我这样认为,如果它是最后一次迭代,不回显逗号(使用:http://stackoverflow.com/questions/1070244/how-to-determine-the-first-and-last-iteration-in-a-foreach -循环)。并且,如果是倒数第二次迭代,那么我也可以将这个方法改为'和'。 –

0

既然你知道你的阵列是什么样子,它似乎有钥匙,你可以尝试类似的东西是什么我”已完成here