json编码仅返回部分数据

时间:2013-09-11 16:36:56

标签: php json

这就是我所拥有的:

public function get_model_by_make($make = null){
    $model_data = $this->vehicle_model->get_model($make);
    echo json_encode($model_data);
}   

public function get_model($make){

    $this->db->select('models_id, models_name');    
    $this->db->where('makes_id', $make);
    $models_data = $this->db->get('Models');

    $rows = array();
    $rows[0] = '-Select-';
    foreach($models_data->result() as $value){
        $rows[$value->models_id] = $value->models_name;
    }
    return $rows;
}

我遇到的问题是,如果我将一个0或1传递给get_model_by_make()函数,则返回没有数组键的json数据。

示例:

$data = get_model_by_make(1)
echo $data; 

结果:

["-Select-","CL","CSX","EL","Integra","Legend","MDX","NSX","RDX","RL","RSX",
"SLX","TL","TSX","Vigor"]

如果传递的数字大于1,则返回如下:

$data = get_model_by_make(2)
echo $data; 

结果:

{"0":"-Select-","35":"Alliance","36":"Ambassador","37":"AMX","38":"Classic"}

为什么json_encode没有为0或1返回键/值对?如果我var_dump数据键/值就在那里。

2 个答案:

答案 0 :(得分:6)

您正在查看两种不同的JSON数据结构。一个是数组,另一个是对象。本质上,json_encode()将尽可能使用前者,如果数据不能由数组表示,则切换到对象。

json_encode($model_data);更改为json_encode($model_data, JSON_FORCE_OBJECT);以使json_encode()始终返回一个对象,该对象将包含您想要的密钥。

进一步的例子:

$data = array(34,26,25,23,6);

echo json_encode($data); // [34,26,25,23,6]

echo json_encode($data, JSON_FORCE_OBJECT); // {"0":34,"1":26,"2":25,"3":23,"4":6}

答案 1 :(得分:0)

你尝试过使用字符串而不是整数吗? 像

$rows['0'] = '-Select-';

等等。