【问题标题】:Merge multidimensional array in php with duplicate values在php中合并具有重复值的多维数组
【发布时间】:2018-12-06 19:16:08
【问题描述】:

如您所见,我有一个包含重复 orderid 的数组 因为一个订单可以有多个库存商品(库存商品名称)。如何合并数组,以便汇总总字段,orderid 不再重复,并且所有 stockitemnames 都放在同一个 orderId 下?

有人有办法解决这个问题吗?

Array ( [0] => Array 
       ([orderId] => 1544100294 
        [total] => 215.28 
        [receivedate] => 0000-00-00 
        [stockitemname] => "The Gu" red shirt XML tag t-shirt (White) XXS 
        [customerid] => 10 ) 
    [1] => Array 
       ( [orderId] => 1544119651 
        [total] => 37.38 
        [receivedate] => 0000-00-00 
        [stockitemname] => USB rocket launcher (Gray) 
        [customerid] => 10 ) 
    [2] => Array 
        ( [orderId] => 1544100294 
        [total] => 1614.60 
        [receivedate] => 0000-00-00 
        [stockitemname] => Large sized bubblewrap roll 50m 
        [customerid] => 10 ) )

数组是根据这个查询的结果创建的:

SELECT oc.orderId, SUM(so.quantity*si.RecommendedRetailPrice) total, oc.receivedate, si.stockitemname, ru.customerid
FROM orderbycustomers oc 
JOIN registered_users ru 
ON oc.customerid = ru.customerid 
JOIN stockitemorders so 
ON oc.orderId = so.orderId 
JOIN stockitems si 
ON so.StockItemID = si.StockItemID
WHERE oc.customerid = $customerid
GROUP BY si.stockitemname
ORDER BY oc.receivedate

【问题讨论】:

  • 是什么创建了这个数组?

标签: php arrays multidimensional-array array-merge


【解决方案1】:

unique array 中获得具有相同idstockitems 的另一种方式。

<?php

 $input = Array ( Array 
       ('orderId' => '1544100294', 
        'total' => 215.28, 
        'receivedate' => '0000-00-00', 
        'stockitemname' => 'The Gu red shirt XML tag t-shirt (White) XXS', 
        'customerid' => 10 ), 
    Array 
       ( 'orderId' => '1544119651', 
        'total' => 37.38, 
        'receivedate' => '0000-00-00', 
        'stockitemname' => 'USB rocket launcher (Gray)', 
        'customerid' => 10 ),
    Array 
        ( 'orderId' => '1544100294', 
        'total' => 1614.60, 
        'receivedate' => '0000-00-00', 
        'stockitemname' => 'Large sized bubblewrap roll 50m', 
        'customerid' => 10 ) );

 // New array using orderId as the key
 $output = array();

 foreach ($input as $values) {
    // Define your key
    $key = $values['orderId'];
    // Assign to the new array using all of the actual values
    $output[$key][] = $values;
 }

 // Get all values inside the array, but without orderId in the keys:
 $output = array_values($output);

 // Print the new array
 print_r($output);
?>

Here 你可以看到它的工作原理!

【讨论】:

    【解决方案2】:

    顺序收集stockitems的一种方法可能是这样的:

    <?php
     $result = [];
     foreach ($ordersFromQuery as $order) {
       $result[$order['orderId']][] = $order;
     }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 2014-01-27
      相关资源
      最近更新 更多