首页 > 解决方案 > 复杂多维数组

问题描述

我正在使用 API 来获取数据,它返回数组数组中的数据。现在我想获取我需要的数据并移动到一个新数组中。

  $shipments = Array
    (
      [0] => Array
        (
          [AmazonOrderId] => 12321313
          [SellerOrderId] => 
          [MarketplaceName] => Amazon.com
          [PostedDate] => 2018-10-01T14:21:46Z
          [ShipmentItemList] => Array
            (
              [0] => Array
                (
                  [SellerSKU] => 12-12321-1231
                  [OrderItemId] => 1212313
                  [QuantityShipped] => 1
                  [ItemChargeList] => Array
                    (
                      [0] => Array
                        (
                          [ChargeType] => Principal
                          [Amount] => 6.95
                          [CurrencyCode] => USD
                        )
                      [1] => Array
                        (
                          [ChargeType] => Principal
                          [Amount] => 6.95
                          [CurrencyCode] => USD
                         )
                     )
               )
          )
     )
 )

我想从最里面的数组中获取金额。但是我无法遍历所有嵌套数组并且找不到解决方案。我可以通过这段代码得到我想要的值。但它得到 1,我需要动态数据。

    function myfunction($products, $field, $value)
{
   foreach($products as $key => $product)
   {
      if ( $product[$field] === $value )
         return $key;
         var_dump($product[$field][0]['ItemChargeList'][0]['Amount']);
   }
   return false;
}

我也尝试遍历所有数组,但它看起来很乱。

if($shipment){
    foreach($shipment as $shiptmentList){
        foreach($shiptmentList as $key => $shiporder){
            foreach($shiporder as $key => $itemcharge){
                foreach($itemcharge as $key=> $eachcharge){
                    var_dump($eachcharge[0]['Amount']);
                }
            }
       }
    }
}

请告诉我什么是迭代项目并获得所需金额的正确方法。谢谢

标签: phparraysloopsnested-loopsamazon-mws

解决方案


如果数据的结构是一致的,你可以使用这样的东西:

 foreach($shipments as $shipment)
    foreach($shipment["ShipmentItemList"] as $itemList)
        foreach($itemList["ItemChargeList"] as $chargedItem) {
                echo $chargedItem["Amount"];
                echo print_r($chargedItem);
        }

推荐阅读