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

时间:2018-09-01 13:14:09

标签: php mysql sql wordpress

这是我的查询

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

我只获得第一项的标题和描述...请帮助:/我检查了一下,我的查询不仅返回了第一行,还返回了我想在数组中显示的所有内容。

2 个答案:

答案 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将自动分配数字键。