2011-09-22 71 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