Вам не нужно использовать 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 />';
}