Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从格式为的嵌套数组中获取值_Php_Arrays_Json - Fatal编程技术网

Php 从格式为的嵌套数组中获取值

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

我正试图从嵌套数组中提取数据,但我无法想出一个有效的解决方案。 JSON数组是:

{
  "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循环。