这就是我所拥有的:
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
数据键/值就在那里。
答案 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-';
等等。