2011-09-22 74 views
0

我的標籤顯示在正確的順序內部foreach循環。如何implode在foreach循環中使用array_push的數組

我想逗號分開他們,但我不知道如何。

有沒有更好的方式來顯示我的標籤,而不使用第二個foreach循環?

$people = array(); 

while($row = mysqli_fetch_array($rs, MYSQLI_ASSOC)){ 
     if(!isset($people[$row["id"]])){ 
      $people[$row["id"]]["id"] = $row["id"]; 
      $people[$row["id"]]["tag"] = $row["tag"]; 
      $people[$row["id"]]["tags"] = array(); 
     } 
    array_push($people[$row["id"]]["tags"], array("id"=>$row["tags_id"],"tag_name"=>$row["tag"])); 
} 

foreach($people as $pid=>$p){ 

    echo "(#{$p['id']}) "; 

    foreach($p["tags"] as $tid=>$t){ 
    echo "<a href='#'>{$t['tag_name']}</a> "; 
    } 

     echo "<br><br>"; 
} 
+0

爲什麼不直接使用'implode()'? –

+0

@Rikudo:內爆多維數組通常不會太好。 –

回答

1

您不需要使用array_push,因爲您只是將一個元素添加到數組中。您可以通過使用語法保存調用函數的開銷:

$people[ $row["id"] ]["tags"][] = array(...); 

我的答案取決於從數據庫中保存的變量的必要性。在你提供的代碼中,你只在嵌套的foreach循環中使用數據庫中的id和tag值。如果是這種情況,那麼你可以簡化你的數組,以便你可以在新的標籤數組上使用implode()。我沒有測試過,因爲我沒有你的數據庫模式,但我相信它會起作用。

<?php 
$people = array(); 
$tags = array(); 

while(($row = mysqli_fetch_array($rs, MYSQLI_ASSOC))) 
{ 
    if(!isset($people[$row['id']])) 
    { 
     $people[ $row['id'] ] = array('id' => $row['id'], 'tag' => $row['tag']); 
     $tags[ $row['id'] ] = array(); 
    } 
    $tags[ $row['id'] ][] = $row['tag']; 
} 

foreach($people as $pid => $p) 
{ 
    echo "(#{$p['id']}) "; 
    echo '<a href="#">' . implode('</a><a href="#">', $tags[ $p['id'] ]) . '</a>'; 
    echo '<br /><br />'; 
} 
+0

非常感謝! – checkenginelight

+0

如果我在該數組中有多個元素,會有多大的不同(編輯後)如果最好設置一個新問題,請讓我知道。 – checkenginelight

+1

因爲您仍然沒有在foreach循環中使用更多變量,所以不會有任何更改。 – nickb