【问题标题】:When I try to access to array items I only get the 1. one当我尝试访问数组项时,我只得到 1. 一个
【发布时间】: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);

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

【问题讨论】:

    标签: php mysql sql wordpress


    【解决方案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 的新子数组推送时自动分配数字键。

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      相关资源
      最近更新 更多