2016-05-29 42 views
0

我有一个json对象,我想在使用php的循环中访问它。有没有一种方法可以在循环中访问它,甚至无需解码?请帮忙。这是我的代码。如何使用php访问循环中的JSON对象?

for($i = 0; $i < count($purchases); $i++){ ?> 

    <tr class="tr-purchase"> 

     <td>{{ $purchases[$i]['purchase_orders'] }}</td> 

    </tr> 
}?> 

{ “ID”:35, “po_code”: “PMS201635”, “purchase_orders”: “一个:2:{I:0;一个:7:{S:2:\” ID \” ; S:1:\ “9 \”; S:3:\ “数量\”; S:1:\ “2 \”; S:4:\ “单位\”; S:7:\ “胶囊\” ; s:6:“pharma”:12:“布洛芬IB”s:9:“packaging”s:7:“50 caps”s:5:price \ “; S:2:\” 23 \ “; S:5:\” 总\ “; S:2:\” 46 \ “;} I:1;一个:7:{S:2:\” ID \ “; S:2:\” 11 \ “; S:3:\” 数量\ “; S:1:\” 5 \ “; S:4:\” 单位\ “; S:6:\” 件“s:6:”pharma“:12:”Ecotrin oral“s:9:”packaging“s:6:”100pcs“s:5:价格\ “; S:2:\” 13 \ “; S:5:\” 总\ “; S:2:\” 65 \ “;}}”, “freight_charge”: “0”, “overall_total”: “111”,“created_at”:“2016-05-21 16:50:49”,“updated_at”:“2016-05-21 16:50:49”,“shipped_via”:“选择”,“条款”: “”}

我只想访问对象内的一些值。我怎样才能访问它?谢谢。

+0

如果是json,则使用'json_decode'并将其作为数组访问。 –

+0

发布你的例子json数据,而不是图像。 –

+0

Okey你需要什么数据作为输出? –

回答

2

以下是您如何获得制药公司的例子,如果您需要更多的帮助,请让我知道。 Online Check

首先,你需要json_deocde JSON字符串并获得purchase_orders它的另一个序列化数据,使用unserialize并再次获得数组和访问它。

$json = '{"id":35,"po_code":"PMS201635","purchase_orders":"a:2:{i:0;a:7:{s:2:\\"id\\";s:1:\\"9\\";s:3:\\"qty\\";s:1:\\"2\\";s:4:\\"unit\\";s:7:\\"Capsule\\";s:6:\\"pharma\\";s:12:\\"Ibuprofen IB\\";s:9:\\"packaging\\";s:7:\\"50 caps\\";s:5:\\"price\\";s:2:\\"23\\";s:5:\\"total\\";s:2:\\"46\\";}i:1;a:7:{s:2:\\"id\\";s:2:\\"11\\";s:3:\\"qty\\";s:1:\\"5\\";s:4:\\"unit\\";s:6:\\"Pieces\\";s:6:\\"pharma\\";s:12:\\"Ecotrin oral\\";s:9:\\"packaging\\";s:6:\\"100pcs\\";s:5:\\"price\\";s:2:\\"13\\";s:5:\\"total\\";s:2:\\"65\\";}}","freight_charge":"0","overall_total":"111","created_at":"2016-05-21 16:50:49","updated_at":"2016-05-21 16:50:49","shipped_via":"Select","terms":""}'; 
$result = json_decode ($json); 
$arr = unserialize ($result->purchase_orders); 

foreach($arr as $val){ 
    echo '<pre>'; 
    print_r($val); 
} 

指定值,让cehck用于制药是Ibuprofen IB与否,这样做是使用if条件。

if($val['pharma'] == 'Ibuprofen IB'){ 
    echo 'Yes you are in "Ibuprofen IB"'; 
} 
+0

* purchase_orders *是**序列化** ... – Poiz

+0

是的,它是序列化的数据。 –

+0

加上序列化对象的内容是一个多维数组,你可以从它的签名中猜测出... – Poiz

2

首先,你必须通过调用 “json_decode($ jsonData)” 的JSON数据转换回原生PHP对象。结果将是一个PHP对象,如下所示:

<?php 
     // CREATE AN ARRAY TO HOLD THE REAL PHP OBJECT 
     // DECODED FROM THE JSON DATA 
     $arrPurchases  = json_decode($purchases); 
    ?> 

现在,您已将数组中的所有购物项都包含在内。每个单个键的值对应一个PHP对象,你现在可以通过一个新的Loop访问像这样...

<?php 
     foreach($arrPurchases as $i=>$objPurchase){ ?> 

     <tr class="tr-purchase"> 
      // SINCE purchase_orders IS A SERIALIZED ARRAY 
      // YOU STILL HAVE TO UNSERIALIZE IT TO GET THE DATA YOU WANT.... 
      // BUT YOU MAY JUST var_dump() IT TO SEE THAT YOU ARE ON TRACK... 
      <?php var_dump($objPurchase->purchase_orders); ?> 

      <!-- UNSERIALIZE THE DATA TO GET WHAT YOU NEED --> 
      <?php $data = unserialize($objPurchase->purchase_orders)); ?> 

      <?php // RESULT OF THE UNSERIALIZE WILL BE AN ARRAY... ?> 
      <?php $output = ""; foreach($data as $iDex=>$arrObj): ?> 
       <td> 
        <!-- START WORKING WITH THE ARRAY: $arrObj --> 
        <!-- BUILD UP YOUR STRING OUTPUT THEREFROM & THE ECHO IT WITHIN THE <TD> --> 
        <?php //$output .= $arrObj[]; ?> 
        <?php // ECHO THE RESULTING OUTPUT HERE; ?> 
       </td> 
      <?php endforeach; ?> 
     </tr> 

    <?php }?>