需要帮助将数据从mysql中提取到多维数组中

时间:2013-04-28 15:51:02

标签: php multidimensional-array

我从数据库中提取数据。由于我似乎遇到了数组和多维数组的问题,我需要一些帮助。

在数据库中我提取以下信息: 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>

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

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

应该是

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

代替。现在,您在检索每个结果行时不断重写$info[]表示法会将新行推送到$info数组,而不是简单地替换之前的行。

答案 1 :(得分: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) {
        // ....
    }
}