取一个数组并将其组合成另一个数组

时间:2014-09-27 00:26:30

标签: php arrays

嘿伙计我有一个简单的问题。我有一个如下数组:

[0]=>
  array(2) {
    ["id"]=>
    string(3) "Prod ID"
    ["qty"]=>
    string(1) "2"
  }

现在这个数组包含来自给定人群的所有订单。这意味着产品ID将被列出一次以上。

我正在尝试将它们组合起来并增加数量,以便我可以针对销售的前5种产品提交报告。但我不知道如何实现这一目标,因为我是数组新手。

我尝试将其放入循环并将其设置为第二个数组,然后如果产品ID与现有数组中的产品ID匹配,则会将qty值一起添加。

任何帮助都会得到很多赞赏。

2 个答案:

答案 0 :(得分:1)

通常,你在这里做的是你将它们分组到另一个数组并使用id循环它们,使它成为一个关键。分配键时,它会被正常推入,如果它已经存在,只需将现有数量添加到当前循环中的数量即可。例如:

$new_data = array();
foreach($data as $value) {
    // simple initialization
    if(!isset($new_data[$value['id']])) {
        $new_data[$value['id']] = array('id' => $value['id'], 'qty' => 0);
    }
    // then sum up the quantity
    $new_data[$value['id']]['qty'] += $value['qty'];
}

$new_data = array_values($new_data); // simple reindex

然后获得前5个,将其排序为先下降,获取切片数组以获得5。

usort($new_data, function($a, $b){
    return $b['qty'] - $a['qty']; // sort descending
});
// get top 5
$top_5 = array_slice($new_data, 0, 5);

答案 1 :(得分:0)

使用此:

foreach ($arr as $value)
    $newArr[$value['id']] = (isset($newArr[$value['id']])) ? $newArr[$value['id']] + $value['qty'] : $value['qty'] ;

这是一个如何做的例子:

$test = [
  [
    "id" => "1",
    "qty" => "2"
  ],
  [
    "id" => "1",
    "qty" => "2"
  ],

  [
    "id" => "2",
    "qty" => "2"
  ],

  [
    "id" => "4",
    "qty" => "1"
  ],

  [
    "id" => "2",
    "qty" => "3"
  ],
  [
    "id" => "4",
    "qty" => "1"
  ]
];

foreach ($test as $value)
    $newArr[$value['id']] = (isset($newArr[$value['id']])) ? $newArr[$value['id']] + $value['qty'] : $value['qty'] ;

arsort($newArr);

print_r($newArr);

<强>输出

Array
(
    [2] => 5
    [1] => 4
    [4] => 2
)

现在,idkeyqty与此id的总和为value。它以 arsort 排序,因此您可以轻松处理信息。