Php 从格式为的嵌套数组中获取值
我正试图从嵌套数组中提取数据,但我无法想出一个有效的解决方案。 JSON数组是:Php 从格式为的嵌套数组中获取值,php,arrays,json,Php,Arrays,Json,我正试图从嵌套数组中提取数据,但我无法想出一个有效的解决方案。 JSON数组是: { "Body": { "stkCallback": { "MerchantRequestID": "26452-605723-2", "CheckoutRequestID": "ws_CO_23042018105859659", "ResultCode": 0, "ResultDesc": "The service request is processe
{
"Body": {
"stkCallback": {
"MerchantRequestID": "26452-605723-2",
"CheckoutRequestID": "ws_CO_23042018105859659",
"ResultCode": 0,
"ResultDesc": "The service request is processed successfully.",
"CallbackMetadata": {
"Item": [
{
"Name": "Amount",
"Value": 1
},
{
"Name": "MpesaReceiptNumber",
"Value": "MDN6ZJE4XG"
},
{
"Name": "Balance"
},
{
"Name": "TransactionDate",
"Value": 20180423105912
},
{
"Name": "PhoneNumber",
"Value": 254722200121
}
]
}
}
}
}
以下是我要提取的PHP代码、金额、MpesaReceiptNumber、电话号码、交易日期:
我可以使用下面的代码阅读第一部分,但不能阅读第二部分:
$arrContextOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, ), );
$data = @file_get_contents( $url, false, stream_context_create( $arrContextOptions ) );
if ( $data != '' ) {
$arr = json_decode($data, true);
echo $string = $arr['Body']['stkCallback']['MerchantRequestID']; // Working
echo $string = $arr['Body']['stkCallback']['MerchantRequestID']['Item'][0]; //Not Working
}
通过使用
我们看到您试图通过调用ID
MerchantRequestID
您在数组键中设置了错误的路径,应该尝试
print_r($arr['Body']['stkCallback']['CallbackMetadata']['Item'][0]);
而不是
echo $string = $arr['Body']['stkCallback']['MerchantRequestID']['Item'][0];
我使用print\r
方法,因为你不能echo
一个数组,它应该是:
echo$string=$arr['Body']['stkCallback']['CallbackMetadata']['Item'][0]代码>该[“项”][0]
是一个数组,无法进行回显。
例如,您需要回显[0]
中的[“name”]
echo $arr['Body']['stkCallback']['MerchantRequestID'] . "\n"; // Working
Foreach($arr['Body']['stkCallback']['CallbackMetadata']['Item'] as $subarr){
Foreach($subarr as $item){
Echo $item ."\n";
}
}
MerchantRequestID
是一个ID(即字符串),而不是数组。但第二行尝试将其作为一行使用。为什么人们将问题标记为重复问题,但提供的URL甚至不能解释问题的基本内容?我想要的是金额的值,即,而不是名称金额。我怎样才能将其他元素的值最大化为PhoneNumber,“Value”:您需要两个嵌套的foreach循环。