我有一个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 而不是上面的索引来获取值吗?
答案 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
)