大家好我想问一下如何使用循环获取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'];
答案 0 :(得分:1)
怎么样?
echo $items['data'][0]['poid']
编辑:循环项目
$data = $items['data'];
foreach($data as $item){
echo 'poid: '.$item['poid'];
}
答案 1 :(得分:1)
使用此代码:
$arr = json_decode($itemlist,true);
echo $arr['data'][0]['poid'];
答案 2 :(得分: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
答案 3 :(得分: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不是字符串数组而是其他对象,则可以按照上述表示法检索嵌套值。
e.g。
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];