如何使用键而不是数组索引从JSON数组中获取值

时间:2020-05-17 09:45:34

标签: php json

我有一个JSON,可以轻松地从中获取值。

但是,在数组部分,我想使用值而不是索引来获取值。

$st = '{
   "Body":{
      "stkCallback":{
         "MerchantRequestID":"10832-3081608-1",
         "ResultCode":0,
         "ResultDesc":"The service request is processed successfully.",
         "CallbackMetadata":{
            "Item":[
               {
                  "Name":"Amount",
                  "Value":2.0
               },
               {
                  "Name":"ReceiptNumber",
                  "Value":"OEH49B3LZU"
               }
            ]
         }
      }
   }
}';

$callbackData = json_decode($st);
echo $callbackData->Body->stkCallback->CallbackMetadata->Item[0]->Value; //works well but this index number could change
echo $callbackData->Body->stkCallback->CallbackMetadata->Item[1]->Value; //works well but this index number could change

我可以使用 Amount ReceiptNumber 而不是上面的索引来获取值吗?

1 个答案:

答案 0 :(得分:0)

如果您只获取奇数值(1或2),则可以遍历所有项并将名称与所要查找的名称进行比较,然后可以提取相应的值...

$name = "Amount";
foreach ( $callbackData->Body->stkCallback->CallbackMetadata->Item as $item )   {
    if ( $item->Name == $name ) {
        echo $item->Value;
    }
}

如果有一个数据块,并且您想在各个地方使用它,则可以更快地提取值(使用array_column()并按名称进行索引...

$data = array_column($callbackData->Body->stkCallback->CallbackMetadata->Item, 
           "Value", "Name");
print_r($data);

这对于您的示例数据给出了...

Array
(
    [Amount] => 2
    [ReceiptNumber] => OEH49B3LZU
)