为了账号安全,请及时绑定邮箱和手机立即绑定

对 php 数组进行分组的最佳方法是什么?

对 php 数组进行分组的最佳方法是什么?

PHP
烙印99 2023-10-15 16:44:23
例如,我有这个数组:$bills = array(                 array("bill_id"=>"1", "product_id"=>"1", "total"=>"10"),                 array("bill_id"=>"2", "product_id"=>"2", "total"=>"20"),                 array("bill_id"=>"3", "product_id"=>"1", "total"=>"30"),                 array("bill_id"=>"4", "product_id"=>"1", "total"=>"40"),                 array("bill_id"=>"5", "product_id"=>"2", "total"=>"50")            );我们需要将每个产品的总计添加到一个数组中,即从上面的数组生成以下数组的最佳干净快速方法是什么: $products = array(                array("product_id"=>"1", "total"=>"80"),                array("product_id"=>"2", "total"=>"70")            );
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

求和的最快方法是索引数组,像这样


$products = array();


foreach ($bills as $bill) {

    $key = $bill['product_id'];

    if (isset($products[$key])) {

        $products[$key]['total'] += $bill['total'];

    } else {

        $products[$key] = $bill;

    }

}


var_dump($products);

输出


array(2) {

  [1]=>

  array(3) {

    ["bill_id"]=>

    string(1) "1"

    ["product_id"]=>

    string(1) "1"

    ["total"]=>

    int(80)

  }

  [2]=>

  array(3) {

    ["bill_id"]=>

    string(1) "2"

    ["product_id"]=>

    string(1) "2"

    ["total"]=>

    int(70)

  }

}

浏览发票清单


foreach($products as $key=>$bill) {

    var_dump($bill);

}


查看完整回答
反对 回复 2023-10-15
?
守着一只汪

TA贡献1872条经验 获得超3个赞

最简单的方法是单遍循环。


$byProduct = [];


foreach($bills as $bill)

{

    $key = $bill['product_id'];

    if (!isset($byProduct[$key])) {

        $byProduct[$key] = [

            'product_id' => $key,

            'total' => 0

        ];

    }


    $byProduct[$key]['total'] += $bill['total'];

}

结果var_dump($byProduct):


array(2) {

  [1] =>

  array(2) {

    'product_id' =>

    string(1) "1"

    'total' =>

    int(80)

  }

  [2] =>

  array(2) {

    'product_id' =>

    string(1) "2"

    'total' =>

    int(70)

  }

}

另一种方法是使用array_walk,但在复杂性方面几乎相同:


$byProduct = [];


array_walk($bills, function(&$bill) use (&$byProduct) {

    $key = $bill['product_id'];

    if (!isset($byProduct[$key])) {

        $byProduct[$key] = [

            'product_id' => $key,

            'total' => 0

        ];

    }


    $byProduct[$key]['total'] += $bill['total'];

});


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信