2013-12-13 32 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