Как внедрить массив, который использует array_push в цикле foreach - PullRequest
0 голосов
/ 22 сентября 2011

Мои теги отображаются во внутреннем цикле 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 Ответ

1 голос
/ 22 сентября 2011

Вам не нужно использовать array_push, поскольку вы добавляете только один элемент в массив.Вы можете сэкономить на вызове функции, используя синтаксис:

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

Мой ответ зависит от необходимости сохранения переменных из базы данных.В предоставленном вами коде вы используете только значения id и тега из базы данных во вложенных циклах foreach.Если это так, то вы можете упростить ваши массивы, чтобы вы могли использовать 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 />';
}
...