如何在foreach循环中内爆使用array_push的数组

时间:2011-09-22 15:53:24

标签: php foreach implode

我的标签以正确的顺序显示在内部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>";
}

1 个答案:

答案 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 />';
}