簡體   English   中英

PHP在數組中組合數組

[英]PHP Combining Array within array

我正在編寫一個 API 並將數據發送到應用程序,我需要一些以某種方式格式化的數組,我似乎無法正確處理。

該消息存在於兩個數組之外:Order 和 Items。 Order 是單個數組,Items 似乎是數組內的一個數組,當訂購多個項目時會出錯。

所需格式:

    {
  "order": {
    "email": "string",
    "phone": "string",
    "company": "string",
    "firstName": "string",
    ...
  },
  "items": [
    {
      "description": "string",
      "orderLineId": 0,
      "priceType": "string",
      "productCode": "string",
      "productDescription": "string",
      "quantity": 0,
      "unitPrice": 0
    }
    {
      "description": "string",
      "orderLineId": 0,
      "priceType": "string",
      "productCode": "string",
      "productDescription": "string",
      "quantity": 0,
      "unitPrice": 0
    }
    ...
  ]
}

我得到的輸出:

{
  "order": {
    "email": "string",
    "phone": "string",
    "company": "string",
    "firstName": "string",
    ...
  },
  "items": [
    {
      "description": "string",
      "orderLineId": 0,
      "priceType": "string",
      "productCode": "string",
      "productDescription": "string",
      "quantity": 0,
      "unitPrice": 0
    }
],
“0”: {
      "items": [
        {
          "description": "string",
          "orderLineId": 0,
          "priceType": "string",
          "productCode": "string",
          "productDescription": "string",
          "quantity": 0,
          "unitPrice": 0
        }
      ]
    }
...
}

使用的代碼:

$client = array (
                    "order"=>array(
                        "email" => $order->get_billing_email(),
                        "phone" => $order->get_billing_phone(),
                        "company" => $order->get_billing_company(),
                        "firstName" => $order->get_billing_first_name(),
                    )
             );

       foreach ($order->get_items() as $item_key => $item ){
             $product = $item->get_product();
                           if(is_null($allitems)){
                                  $allitems = array (
                                        "items"=>array([
                                               "description" => $item->get_name(),
                                               "orderLineId"=>0,
                                               "priceType"=>"string",
                                               "productCode"=>$product->get_sku(),
                                               "productDescription" =>"string",
                                               "quantity" => $item->get_quantity(),
                                               "unitPrice"=> $product->get_price()
                                        ])
                                  );
                           }

                    else {
                           $singleitem = array (
                                  "items"=>array([
                                         "description" => $item->get_name(),
                                         "orderLineId"=>0,
                                         "priceType"=>"string",
                                         "productCode"=>$product->get_sku(),
                                         "productDescription" =>"string",
                                         "quantity" => $item->get_quantity(),
                                         "unitPrice"=> $product->get_price()
                                  ])
                           );
                           array_push($allitems, $singleitem);
                    }
             }

       # Combine client and items into one message
             $message = array_merge($client, $allitems);

我嘗試了 array_merge、array_push 等的不同方法,但不知何故我無法按需要的方式獲取項目。 對此有何建議?

對於一個簡單的循環,您的解決方案看起來有點混亂和過於復雜。 看起來您正在重新聲明 items 值而不是添加到 items 數組。 我認為這應該更接近你所追求的:

$order_details = [
    "email" => $order->get_billing_email(),
    "phone" => $order->get_billing_phone(),
    "company" => $order->get_billing_company(),
    "firstName" => $order->get_billing_first_name(),
];

$all_items = [];
foreach( $order->get_items() as $item_key => $item ){
    $this_product = $item->get_product();
    $all_items[] = [
        "description" => $item->get_name(),
        "orderLineId"=>0,
        "priceType"=>"string",
        "productCode"=>$this_product->get_sku(),
        "productDescription" =>"string",
        "quantity" => $item->get_quantity(),
        "unitPrice"=> $this_product->get_price()
    ];
}

$message = [
    "order" => $order_details,
    "items" => $all_items,
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM