2013-08-16 6 views
1

Привет, ребята, я просто хочу спросить, как я могу получить значение JSON, используя цикл? Я уже провел некоторое исследование, но мой код не будет работать. Я не знал, в чем моя ошибка. Я хочу получить все значение json и поместить его в таблицу. Кстати, я использую CodeIgniterКак получить значения JSON?

Моя модель:

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

Вы можете печатать ваша строка json здесь? –

+0

ok wait Я использую codeigniter – rochellecanale

+0

ok i обновил мой код – rochellecanale

ответ

1

Как насчет?

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

EDIT: элементы петли

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

ОК я попробую это спасибо – rochellecanale

+0

нет, он не работает – rochellecanale

+0

должен быть $ items ['data'] [0] ['poid'] –

0

JSON строку при декодировании он будет преобразован в объект Javascript, и вы можете пробежать свои свойства с точечной нотации или как словарь.

Так, например, если ваша строка JSON-то вроде:

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

вы можете получить значение «а», «B» или «с» либо с помощью

var a = obj.data[0]; 

или

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

если obj.data не массив строк, но и другие объекты, которые будут следовать выше обозначения для получения вложенного V alues.

например.

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]; 
+0

Извините, но я должен сфокусироваться, потому что вопрос не связан с javascript, я уже удалил теги, которые были ошибочно добавлены OP –

+0

. Я не возражаю, и я вижу, что это не имеет значения после редактирования, хотя нужно сказать, что оригинальный вопрос был отмечен только Javascript, JQuery и Json. :) –

1

Используйте этот код:

$arr = json_decode($itemlist,true); 
echo $arr['data'][0]['poid']; 
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

Смежные вопросы