我从数据库中提取数据。由于我似乎遇到了数组和多维数组的问题,我需要一些帮助。
在数据库中我提取以下信息: 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>
我错过了什么?当我运行它时它只给我最后一个条目。
感谢您的帮助
答案 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) {
// ....
}
}