0

我正在从数据库中提取数据。由于我似乎在处理数组和多维数组时遇到了问题,所以我需要一些帮助。

在数据库中,我正在提取以下信息:id、排、姓名、位置、状态

我需要将所有这些放入一个数组中。

因为有超过 150 个名字,其中许多担任相同的职位。

这是我正在使用的代码:

    $sql='SELECT  id, position, platoon, name, status FROM ost_platoon_assignments';
    $users=db_query($sql);
    $num=db_num_rows($users);
    while ($row = db_fetch_array($users)) {
        $info = array(
           $row['position'] => array(
            $row['platoon'] => array("name" =>$row['name'], "status" => $row['status']),
          ),
        );
     } 

我想通过表格列出特定位置的人:

例子:

    <table border="1">
    <?
    foreach ($info as $position => $names) {
        echo "<tr>";
        echo "<td> {$position} </td>";
       foreach ($names as $name) {
        if ($name[name] =="") {$name[name] = "Vacant"; }
        echo "<td class=\"status{$name[status]}\"> {$name[name]} </td>";
       }
        echo "</tr>";
     }
    ?>
    </table>

我错过了什么?当我运行它时,它只会给我最后一个条目。

谢谢你的帮助

4

2 回答 2

0

它应该是

 $info[] = array( ..... );
      ^^-----

反而。现在,您不断地$info在检索每个结果行时进行覆盖。该[]符号会将新行推送到$info数组上,而不是简单地替换以前的行。

于 2013-04-28T15:55:20.260 回答
0

您正在使用 while 语句的每次迭代覆盖 $info 的值。如果要将所有数据存储在数组结构中,如下所示:

$info = array(
    'general' => array(
        array( /* general 1 */ ),
        array( /* general 2 */ ),
        array( /* general 3 */ )
    ),
    'colonel' => array(
        array( /* colonel 1 */ ),
        array( /* colonel 2 */ ),
    ),
    // .....
)

然后使用如下过程:(注意我使用的是 PDO,您也可以使用 PHP 的 mysqli,但使用其中之一而不是已弃用的 PHP mysql 库)。

$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$result = $conn->query('SELECT  id, position, platoon, name, status FROM ost_platoon_assignments');

$info = array();
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    $info[$row['position']][] = $row;
}

然后,您可以像这样按位置遍历每个用户

foreach ($info as $position => $users) {
    foreach ($users as $user) {
        // ....
    }
}
于 2013-04-28T16:14:40.233 回答