1

大家好,我只是想问一下如何使用循环获取 JSON 的值?我已经做了一些研究,但我的代码不起作用。我不知道我的错误是什么。我想要的是获取所有 json 值并将其放入表中。顺便说一句,我正在使用 codeigniter

我的模型:

public function getAllPurchaseOrder(){

        $array = array();
        $sqlSelectAll = "select * from po_order
                         inner join po_supplier on po_order.poid = po_supplier.poid
                         inner join po_account_details on po_supplier.poid = po_account_details.poid";
        $resultSelectAll = $this->db->query($sqlSelectAll);
        foreach($resultSelectAll->result_array() as $details){
            $array[] = $details;
        }
        return "{\"data\":" .json_encode($array). "}";

}

我的控制器:

  public function index(){

        $data['title'] = "Welcome";
        $data['copyright'] = date('Y');
        $data['purchased_comment'] = $this->po_model->fetch_purchased_refid(); 
        $data['link'] = "PO";
        $data['itemlist'] = $this->po_model->getAllPurchaseOrder();            
        $this->load->view('common/header_common',$data);
        $this->load->view('common/navigation');
        $this->load->view('Purchase Order/contents/index',$data);
        $this->load->view('common/footer_common',$data);

    }

这是我的代码:

echo "<pre>";
var_dump(json_decode($itemlist,true));

我的 json 输出使用 var_dump(json_encode)

  array(1) {
  ["data"]=>
  array(1) {
    [0]=>
    array(25) {
      ["poid"]=>
      string(1) "1"
      ["itemid"]=>
      string(1) "3"
      ["item_desc"]=>
      string(6) "Drinks"
      ["item_qty"]=>
      string(1) "4"
      ["item_price"]=>
      string(4) "5.00"
      ["total_amount"]=>
      string(5) "20.00"
      ["cash_on_delivery"]=>
      string(1) "Y"
      ["is_check"]=>
      string(1) "Y"
      ["bank_transfer"]=>
      string(1) "N"
      ["transaction_date"]=>
      string(19) "2013-08-15 15:44:30"
      ["posupid"]=>
      string(1) "1"
      ["spid"]=>
      string(1) "2"
      ["spname"]=>
      string(12) "MILO COMPANY"
      ["spaddress"]=>
      string(6) "Manila"
      ["contact_person"]=>
      string(4) "None"
      ["tin"]=>
      string(12) "1232-456-789"
      ["contact_number"]=>
      string(7) "0912151"
      ["poaccid"]=>
      string(1) "1"
      ["payee_name"]=>
      string(6) "Larren"
      ["bank_details"]=>
      string(11) "BDO Account"
      ["account_name"]=>
      string(7) "Premium"
      ["account_number"]=>
      string(5) "54564"
      ["prepared"]=>
      string(5) "Admin"
      ["checked"]=>
      string(5) "Admin"
      ["approved"]=>
      string(5) "Admin"
    }
  }

我的问题是我无法获得 json 的值。例如,假设我想要poid的值,但我不知道如何。我尝试了一些数组但无法正常工作

这是我的代码:

$items = json_decode($itemlist,true);
echo $items['poid'];
4

4 回答 4

1

怎么样?

echo $items['data'][0]['poid']

编辑:循环项目

$data = $items['data'];    
foreach($data as $item){
    echo 'poid: '.$item['poid'];
}
于 2013-08-16T06:43:46.363 回答
1

使用此代码:

$arr = json_decode($itemlist,true);
echo $arr['data'][0]['poid'];
于 2013-08-16T06:51:11.387 回答
1

以前的答案只会让您获得第一个元素的值,我假设您想要遍历查询产生的所有元素。

首先,您可以将模型功能简化为:

public function getAllPurchaseOrder(){
        $sqlSelectAll = "select * from po_order
                         inner join po_supplier on po_order.poid = po_supplier.poid
                         inner join po_account_details on po_supplier.poid = po_account_details.poid";
        $resultSelectAll = $this->db->query($sqlSelectAll);
        return json_encode($resultSelectAll->result_array());
}

现在要遍历视图中的数据,您应该熟悉foreach遍历数组中的所有元素。

$items = json_decode($itemlist,true); //passing true decodes into associative array

foreach($items as $item){
    echo 'poid: '.$item['poid'];
}

传递true给 json_decode() 会返回所有转换为数组的对象,如果你想使用你只需要用来->访问对象属性的对象,例如: $item->poid

于 2013-08-16T06:55:25.963 回答
0

解码后的 JSON 字符串将被转换为 Javascript 对象,您可以使用点表示法或像字典一样遍历其属性。

例如,如果您的 JSON 字符串类似于:

var myJSONString = "{'data':['a', 'b', 'c'] }";
var obj = JSON.parse(myJSONString);

您可以通过使用检索“a”、“b”或“c”的值

var a  = obj.data[0];

或者

var a = obj['data'][0];

如果 obj.data 不是字符串数组而是其他对象,您将按照上述表示法检索嵌套值。

例如

var myJSONString = "{'data':['a':[2,4,6], 'b':[1,3,5], 'c':[1,2,3,5,8]] }";
var obj = JSON.parse(myJSONString);

var firstOfA = obj['data']['a'][0];

或者

var firstOfA= obj.data.a[0];
于 2013-08-16T06:50:21.517 回答