我正在使用Codeigniter并在函数内部调用控制器来返回我想在foreach中使用的数据来构建一个insert语句。
返回的JSON如下所示:
{
"Data": [
{
"id": "743",
"day": "1",
"day_type": "Party",
"day_dresscode": "Black",
"day_p_id": "1",
"description": "Test desc",
"name": "test"
},
{
"id": "743",
"day": "2",
"day_type": "Party",
"day_dresscode": "White",
"day_p_id": "1",
"description": "Test desc 1",
"name": "test 2"
}
]
}
我的php如下所示:
// This where i got my JSON
$datavar = $this->model->get_json_data($id,$code);
// This is to decode the JSON
$datavar_decode['Data'] = json_decode($datavar,true);
以下是我的预告:
$i = 1;
foreach($datavar_decode['Data'] as $data):
$data_insert = array(
'val1' => $data['val1'],
'val2' => $data['val2'],
'val3' => $data['val3'],
'val4' => $data['val4']
);
$this->db->insert('mssqltable', $data_insert);
$i++;
endforeach;
它给出了以下错误:
Invalid argument supplied for foreach()
答案 0 :(得分:3)
不要使用json。
您遇到的问题是您要返回一组对象,这是您从$query->result()
获得的行为,或者如果您使用$query->row()
,那么您将获得一个对象代表一行。
要返回数组,请使用$query->row_array()
作为单行,或者对于返回的多条记录,您将使用$query->result_array()
。
查看所有详细信息:https://www.codeigniter.com/user_guide/database/results.html
答案 1 :(得分:0)
您可以尝试使用此代码来测试您的$datavar_decode['Data']
无法分配空数组,无论如何都无法开始。
if (is_array($datavar_decode['Data']) || is_object($datavar_decode['Data']))
{
foreach ($datavar_decode['Data'] as $data)
{
...
}
}