我的标签以正确的顺序显示在内部foreach循环中。
我想用逗号分隔它们但不确定如何。
有没有更好的方法来显示我的标签而不使用第二个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 :(得分: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 />';
}