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

Posted

技术标签:

【中文标题】当我尝试访问数组项时,我只得到 1. 一个【英文标题】:When I try to access to array items I only get the 1. one 【发布时间】:2018-09-01 13:14:08 【问题描述】:

这是我的查询

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

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

【问题讨论】:

【参考方案1】:

每次迭代都会覆盖数组索引。每次将值分配给数组时,都需要创建新索引。

所以要么做:-

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

【讨论】:

谢谢。例如,现在如何用 echo 显示它? title1 desc 1 $nbsp title2 desc2 也可以使用foreach()【参考方案2】:

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

$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()。 PHP 将在将关联数组作为$data 的新子数组推送时自动分配数字键。

【讨论】:

以上是关于当我尝试访问数组项时,我只得到 1. 一个的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 Go 模板中数组第一个索引的值

Guzzle 使用嵌套数组发布多部分请求

当我使用点表示法时,字段返回未定义

访问从 API 解码的数组中的第一项

DateTime 数组的二进制序列化

在打字稿中将 JSON 转换为字符串数组