将数组从模型传递到控制器以在CodeIgniter中查看

时间:2013-05-24 14:15:22

标签: php arrays json codeigniter-2

我有一个模型,它在CodeIgniter中向控制器发送一个错误响应,然后传递给只是JSON编码器的视图。这是模型中的数组。

return $posts[] = array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

我遇到的问题是我需要在$ posts变量之后使用那些方括号,因为有时候我需要一个错误数组。然而,当我将单个数组传递给视图时,它编码的JSON没有方括号,但是当我有多个数组时它包含方括号,我每次都需要JSON中的方括号。这是控制器......

$data['data'] = $this->logins_model->signup($post_data);  
$this->load->view('json', $data);  

以下是视图......

header('Content-type: application/json');  
$response['response'] = $data;  
echo json_encode($response); 

我需要JSON响应看起来像这样

{
    "response": [
        {
            "complete": 0, 
            "error": 1003, 
            "message": "Username already exists"
        }
    ]
}  

不是这样!

{
    "response": {
        "complete": 0, 
        "error": 1003, 
        "message": "Username already exists"
    }
}

2 个答案:

答案 0 :(得分:1)

由于你想在json中得到数组,你也应该在php数组中使用它(即数据结构应该满足)。因此$response['response'] = $data;应为$response['response'] = array($data);

在您的示例中var_dump($response);给出:

array(1) {
  ["response"]=>
  array(3) {
    ["complete"]=>
    int(0)
    ["error"]=>
    int(1003)
    ["message"]=>
    string(23) "Username already exists"
  }
}

如您所见$response['response']json的对象。

$response['response'] = $data;替换为$response['response'] = array($data);时,您要在json中转换的数据结构将变为:

array(1) {
  ["response"]=>
  array(1) {
    [0]=>
    array(3) {
      ["complete"]=>
      int(0)
      ["error"]=>
      int(1003)
      ["message"]=>
      string(23) "Username already exists"
    }
  }
}

这会为您提供所需的输出,因为json_encode预计$response['response']中可能会有其他项目。

Demo

修改 你的模型应该返回一维数组。例如:

return array('complete'=>0,'error'=>1003, 'message'=>'Username already exists');

您应该将它分配给另一个包含所有错误消息的数组:

$data['data'][] = $this->logins_model->signup($post_data);
$this->load->view('json', $data);  

Demo 2

答案 1 :(得分:0)

在您的视图中将$ post定义为数组并从那里删除方括号。要在视图中检查结果,请使用print_r而不是echo。这将准确显示检索到的数据量。