在 Laravel 中从动态嵌套数组获取值

问题描述 投票:0回答:1

我想从这个数组中获取所有值:

<root>
   <Element1>
       <items>
            <Element0>
                 <sku>AAAA</sku>
             </Element0>
             <Element1>
                 <sku>BBBB</sku>
             </Element1>
        </items>
   </Element1>
        <items>
              <Element0>
                  <sku>ABAB</sku>
               </Element0>
        </items>
   <Element2>
   </Element2>
...
...
</root>

该数组来自 Magento2 订单 API,因此它是动态的,我实现了所有目标,但无法从嵌套数组中获取 sku。

这就是我尝试做的:

$phpDataArray = json_decode($xml, true);

    if (count($phpDataArray['items']) > 0) {
      $sku = array();
      $dataArray = array();
      foreach ($phpDataArray['items'] as $index => $data) {

        $status = $data['status'];
        $customername = $data['customer_firstname'];
        $customersurname = $data['customer_lastname'];
        $email = $data['customer_email'];
        $increment_id = $data['increment_id'];
        $orderdata = $data['created_at'];
        $total = $data['grand_total'];
        foreach ($data['items'] as $item) {
          $sku= $item['sku'];
        }
        $dataArray[] = [
          "increment_id" => $increment_id,
          "status" => $status,
          "product_sku" => $sku,
          "customername" => $customername,
          "customersurname" => $customersurname,
          "email" => $email,
          "order_date" => $orderdata,
          "total" => $total
        ];
      }
    }

但仅显示最后一个 sku。 示例:在 element1 中我只有 BBBB,但我想要 AAAA;BBBB

php arrays json laravel magento2
1个回答
0
投票

$data['items']
迭代之前,初始化一个数组并将元素推入其中。这样您就不会覆盖
$sku
变量的每个先前设置的值。

$phpDataArray = json_decode($xml, true);

if (count($phpDataArray['items']) > 0) {
  $sku = array();
  $dataArray = array();
  foreach ($phpDataArray['items'] as $index => $data) {

    $status = $data['status'];
    $customername = $data['customer_firstname'];
    $customersurname = $data['customer_lastname'];
    $email = $data['customer_email'];
    $increment_id = $data['increment_id'];
    $orderdata = $data['created_at'];
    $total = $data['grand_total'];
    $sku = [];// <- here
    foreach ($data['items'] as $item) {
      $sku[] = $item['sku'];// <- and here
    }
    $dataArray[] = [
      "increment_id" => $increment_id,
      "status" => $status,
      "product_sku" => $sku,
      "customername" => $customername,
      "customersurname" => $customersurname,
      "email" => $email,
      "order_date" => $orderdata,
      "total" => $total
    ];
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.