如何使用从php查询返回到foreach循环的JSON?

时间:2017-09-12 18:11:03

标签: php json codeigniter foreach

我正在使用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()

2 个答案:

答案 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)
    {
        ...
    }
}