当我尝试访问数组项时,我只得到 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. 一个的主要内容,如果未能解决你的问题,请参考以下文章