当我尝试访问数组项时,我只得到1一

gijlo24d  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(299)

这是我的问题

$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);

我只得到第一个项目的标题和描述。。。请帮助:/i选中,我的查询返回数组中的所有内容,而不仅仅是第一行。

e0bqpujr

e0bqpujr1#

每次在迭代中都会重写数组索引。每次为数组赋值时都需要创建新索引。
所以你要么:-

$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'];
}

xoshrz7s

xoshrz7s2#

如果最终的目标只是显示这些值,那么就不必费心将数据重新存储为新的多维数组。

$rows = $mydb->get_results("SELECT title, description FROM site_info WHERE site_id='$id';");

如果 $id 如果是用户提供的数据或来自其他不受信任的来源,出于安全考虑,您应该实施某种形式的清理/检查。至少,如果 $id 应为整数,将其转换为整数(整数不需要用引号 Package )。

$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>";

如果您有充分的理由保留resultset的冗余/重组副本,那么您可以更简单地命令php为您生成索引。

foreach ($rows as $obj) {
    $data[] = ['title' => $obj->title, 'id' => $obj->id];
}

这个 [] 就像打电话一样 array_push() . php将自动分配数字键,同时将关联数组作为 $data .

相关问题