【问题标题】:Illegal string offset (PHP Warning)非法字符串偏移(PHP 警告)
【发布时间】:2017-01-14 04:31:03
【问题描述】:

我正在使用 Codeigniter 框架。实际上,我正在尝试在 view 中显示一个 array。但它显示了一些错误。我检查了我的代码但仍然无法找到错误。任何帮助将不胜感激。

models/users_model.php

class Users_model extends CI_Model{

            public function getUsers(){
                return array(
                        'first' => 'Farhan Khan',
                        'second' => 'Abdul Wali',
                        'third' => 'Shahzaib Kamal'
                        );
            }

        }

controller/users.php

 class Users extends CI_Controller{

        public function index(){
            $this->load->model('Users_model');
            $data['users'] = $this->Users_model->getUsers();

            $this->load->view('users_list', $data);
        }

    }

views/users_list.php

    <!DOCTYPE html>
<html>
<head>
    <title>Users List</title>
</head>
<body>
    <?php
        foreach ($users as $user) {
            echo $user['first'];
        }
    ?>
</body>
</html>

我得到的错误是:

遇到了 PHP 错误

严重性:警告

消息:非法字符串偏移 'first'

【问题讨论】:

  • 您是否尝试过任何答案,不要忘记接受对您有帮助的答案。

标签: php codeigniter


【解决方案1】:

像这样试试..

<!DOCTYPE html>
<html>
<head>
    <title>Users List</title>
</head>
<body>
    <?php
        foreach ($users as $user) {
            echo $user."<br/>";
        }
    ?>
</body>
</html>

<!DOCTYPE html>
    <html>
    <head>
        <title>Users List</title>
    </head>
    <body>
        <?php
            foreach ($users as $key=>$value) {
                 echo $key."=>".$value."<br/>";
            }
        ?>
    </body>
    </html>

【讨论】:

    【解决方案2】:

    你可以这样试试

    记住 CodeIgniter 类的第一个字母和文件名只有大写,如 here 解释的那样

    型号:User_model.php文件名

    public function getUsers() {
       return $this->db->get('users')->result_array();
    }
    

    控制器 Users.php 文件名

    public function __construct() {
       parent::__construct();
       $this->load->model('user_model'); // User_model.php
    }
    
    public function index() {
        $data['users'] = $this->user_model->getUsers();
        $this->load->view('users', $data);
    }
    

    查看

    foreach ($users as $user) {
       echo $user['first']; // first will be a column name.
    }
    

    【讨论】:

      【解决方案3】:

      您只有一个由模型返回的一维 array。因此,当您执行foreach 循环时,您实际上是在迭代它并获得该数组的元素。

      您可以通过修改视图来确认。

      <?php
              foreach ($users as $user) {
                  echo $user."<br/>";
              }
      
           //or you can simply do a var_dump($users);
          ?> 
      

      如果你想修复它,那么你需要返回一个多维数组。我假设您将来希望返回多个用户。

      public function getUsers(){
                      $users = [];
                      $users[] =  array(
                              'first' => 'Farhan Khan',
                              'second' => 'Abdul Wali',
                              'third' => 'Shahzaib Kamal'
                              );
                      return $users;
                  }
      

      【讨论】:

      • 太好了,你能告诉我你有什么疑问吗?
      • 其实我不明白你为什么用"$users[] = array(..." 而不是"return array(..."
      • 我假设你想返回多个用户,但你宁愿只返回一个user。如果你想返回多个用户,你需要一个二维数组。如果用户是一个数组。这就是为什么我首先创建了一个users 数组,然后向其中添加了用户。
      【解决方案4】:

      你犯了一个小错误--

      你的数组 --

      $arr = array(
          'first' => 'Farhan Khan',
          'second' => 'Abdul Wali',
          'third' => 'Shahzaib Kamal'
          );
      

      当你将使用那个来打印这个数组时--

      echo "<pre>";
      print_r($arr);
      

      然后输出会是这样--

      Array
      (
          [first] => Farhan Khan
          [second] => Abdul Wali
          [third] => Shahzaib Kamal
      )
      

      在 foreach 内部,其打印数组的索引为 0,1,2,3...,但数组内部没有任何索引,这就是为什么给出此错误的原因..

      【讨论】:

        猜你喜欢
        • 2013-04-11
        • 2012-04-09
        • 1970-01-01
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多