【问题标题】:How to use an JSON return from a php query into an foreach loop?如何使用来自 php 查询的 JSON 返回到 foreach 循环中?
【发布时间】:2017-09-12 18:11:03
【问题描述】:

我正在使用 Codeigniter,在一个函数中我调用一个控制器来返回我想在 foreach 中使用的数据来构建一个插入语句。

返回的 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); 

下面是我的foreach:

$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()

【问题讨论】:

  • 为什么是 json?为什么不直接从 DB 类中获取结果或行并继续前进?
  • 我愿意。但它告诉我Cannot use object of type stdClass as array
  • 所以不要使用$query->result(),你只需使用$query->result_array(),或者如果你只是获取一行使用$query->row_array()
  • 很好,还没有遇到result_array(),但它有效。如果您想将此作为答案发布,我会接受。
  • 好的,我刚刚回答了。

标签: php json codeigniter foreach


【解决方案1】:

不要使用 json。

你的问题是你正在返回一个对象数组,这就是你从$query->result()得到的行为,或者如果你使用$query->row(),那么你得到一个代表单行的对象。

为了返回一个数组,对单行使用$query->row_array(),或者对返回的多条记录使用$query->result_array()

查看所有详情:https://www.codeigniter.com/user_guide/database/results.html

【讨论】:

    【解决方案2】:

    您可以尝试使用此代码来测试您的$datavar_decode['Data'] 在您没有任何开始的情况下不会分配空数组。

    if (is_array($datavar_decode['Data']) || is_object($datavar_decode['Data']))
    {
        foreach ($datavar_decode['Data'] as $data)
        {
            ...
        }
    }
    

    【讨论】:

    • 不,.. 我知道它不是空的。JSON 是 DB 上的稳定值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多