这是我的查询
$rows = $mydb->get_results("SELECT title, description
FROM site_info
WHERE site_id='$id';");
我得到类似的东西
Title1 Desc1
Title2 Desc2
etc.
我想将该数据放入数组中,所以我这样做:
$data = array();
foreach ($rows as $obj) {
$data['title'] = $obj->title;
$data['description'] = $obj->description;
}
当我这样做时:
print_r($data);
我只获得第一项的标题和描述...请帮助:/我检查了一下,我的查询不仅返回了第一行,还返回了我想在数组中显示的所有内容。
答案 0 :(得分:3)
每次迭代时都覆盖数组索引。每次将值分配给数组时都需要创建新索引。
所以也可以:-
$data = array();
foreach ($rows as $key=>$obj) { // either use coming rows index
$data[$key]['title'] = $obj->title;
$data[$key]['description'] = $obj->description;
}
或
$data = array();
$i=0; //create your own counter for indexing
foreach ($rows as $key=>$obj) {
$data[$i]['title'] = $obj->title;
$data[$i]['description'] = $obj->description;
$i++;// increase the counter each time after assignment to create new index
}
要再次显示,请使用foreach()
foreach ($data as $dat) {
echo $dat['title'];
echo $dat['description'];
}
答案 1 :(得分:0)
如果最终目标只是显示这些值,那么您就不必为将数据存储为新的多维数组而烦恼。
$rows = $mydb->get_results("SELECT title, description FROM site_info WHERE site_id='$id';");
如果$id
是用户提供的数据或来自其他不受信任的来源,则出于安全性考虑,您应实施某种形式的清理/检查。至少,如果$id
应该是整数,则将其强制转换为整数(整数不需要用引号引起来)。
$rows = $mydb->get_results("SELECT title, description FROM site_info WHERE site_id = " . (int)$id);
要显示对象类型数据时,只需循环$rows
并使用->
语法以回显值。
echo "<ul>";
foreach ($rows as $obj) {
echo '<li>' , $obj->title , ' & ' , $obj->description , '</li>';
}
}
echo "</ul>";
如果您有充分的理由保留结果集的冗余/重组副本,则可以更简单地命令php为您生成索引。
foreach ($rows as $obj) {
$data[] = ['title' => $obj->title, 'id' => $obj->id];
}
[]
就像调用array_push()
一样。在将关联数组推为$data
的新子数组时,PHP将自动分配数字键。