【问题标题】:renaming array using foreach on controller and view:在控制器和视图上使用 foreach 重命名数组:
【发布时间】:2018-02-14 09:46:49
【问题描述】:

我遇到了问题,我尝试在controller 上使用foreach 重命名我的$query->result_array(),并使用另一个foreachview 中调用它以显示来自$query->result_array(); 的结果

我是这样做的。

我的controller

我有一个名为logs() 的用户定义函数,我在里面有一个查询并使用$query->result_array() 来获取结果。然后我使用foreach{} 重命名它,如下面的代码:

    $result     = array();
    foreach ($query->result_array() as $row) {
        $result = array(
            "id"         => $row['id'],
            "name"       => $row['name'],
            "status"     => $row['status'],
            "time"       => $row['time']
            );
    }
    return $result;

然后我创建了另一个名为 filtered_logs() 的用户定义函数来过滤来自 logs() 的结果 *我过滤它是因为我有多个表到 LEFT JOIN 它。

    $filtered   = array();
    $logs       = $this->logs();

    if ($logs['status'] == "ok") {
        $query = $this->db->query("SELECT * FROM table a 
                                    LEFT JOIN table b 
                                    ON a.image = b.image
                                    LEFT JOIN ....ON...
                                    WHERE a.id = '".$logs['id']."'");

        foreach ($query->result_array() as $row){
            $filtered = array(

                "path"     => $row['path'],
                "grade"    => $row['grade'],
                "time"     => $logs['time'],
                );
        }
    }

把这些结果发给view我用了这个方法,放在controllerindex上。

   $data['logs'] = $this->filtered_logs();
   $this->load->view('pages', $data);

然后使用这些代码在view 上显示它:

   <?php
      foreach ($logs as $row) {
        echo $row['id']." </br>";
        echo $row['status']." </br>";
        echo $row['time']." </br>";
      }
   ?>

但是当我确实使用这种处理 result_array 的方式时,它给了我一个错误提示“非法字符串偏移”

谁能帮助我或告诉我是否有其他方式显示我的查询结果?

【问题讨论】:

  • 一方面,您可能希望像这样添加大括号 []:$result[] = array(...) 而不是 $result = array(...)。否则,您不会向 $array 添加元素,而是分配一个新值。
  • 你错过了 "name" 中的单引号 => $row['name'],

标签: php arrays codeigniter


【解决方案1】:

我猜你在 $result 数组之后缺少“[]”,你在其中为每个循环提供数据,它导致了这个错误。

应该是这样的:

$result = array();
foreach ($query->result_array() as $row) {
    $result[] = array(
        "id"         => $row['id'],
        "name"       => $row['name'],
        "status"     => $row['status'],
        "time"       => $row['time']
        );
}
return $result;

【讨论】:

  • 我稍后会尝试这样做,请等待结果。谢谢
  • 这有帮助!谢谢你帮助我。
【解决方案2】:

这只是显示结果的另一种方式,试试吧。

    <?php
          foreach ($logs as $row) {
            echo $row->id." </br>";
            echo $row->status." </br>";
            echo $row->time." </br>";
          }
       ?>

【讨论】:

  • 我注意到你没有关闭'name'上的大括号替换这一行 "name" => $row['name], with "name" => $row['name'],
  • 对不起,这只是stackoverflow中的一个错字,我会尝试这样做,请等待我的回复谢谢
  • 很抱歉通知您,但这仍然不起作用,感谢您帮助我。我已经找到了答案。 :)
  • 好,把你的答案贴在这里,对以后遇到类似问题的人会有帮助!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多