PHP - 数组的某些值的条件总和

时间:2015-07-30 08:20:59

标签: php arrays sum

我有一个这种类型的PHP数组,这是由数据库上的特定查询产生的。

$output = Array
(
  [0] => Array 
      (
       'price' => 100
       'date' => '2015-07-28'
       'total' => 200
       'qty' => 2
      )
  [1] => Array
      (
       'price' => 80
       'date' => '2015-07-28'
       'total' => 240
       'qty' => 3
      )
  [2] => Array
      (
       'price' => 100
       'date' => '2015-07-29'
       'total' => 300
       'qty' => 3
      )
  [3] => Array
      (
       'price' => 90
       'date' => '2015-07-28'
       'total' => 90
       'qty' => 1
      )
)

我试图根据价格关键值对total和qty求和,得到一个如下所示的数组:

$grouped = Array
(
[0] => Array 
    (
     [price] => 100
     [sumtotal] => 500
     [sumqty] => 5
    )
 [1] => Array 
    (
     [price] => 80
     [sumtotal] => 240
     [sumqty] => 3
    )
 [2] => Array 
    (
     [price] => 90
     [sumtotal] => 90
     [sumqty] => 1
    )
 )

仍然无法找到解决这个问题的方法。

3 个答案:

答案 0 :(得分:2)

尝试使用简单的foreach循环

$result = array();
foreach ($output as $key => $value) {
    $hash = $value['price'];
    if (isset($result[$hash])) {
        $result[$hash]['price'] = $value['price'];
        $result[$hash]['sumtotal'] += $value['total'];
        $result[$hash]['sumqty'] += $value['qty'];
    } else {
        $result[$hash]['price'] = $value['price'];
        $result[$hash]['sumtotal'] = $value['total'];
        $result[$hash]['sumqty'] = $value['qty'];
    }
}
print_r(array_values($result));

Demo

答案 1 :(得分:0)

我不明白,它是没有日期的相同阵列。?

修改

好的,试试这个

    $temp= array();
for($i=0; $i<sizeof($outpout);$i++)
{

if(!isset($temp[$i]))
    $temp[$i]=array();
$temp[$i][$outpout[$i]['price']]+=$outpout[$i]['qty']];
}

$res=array();
$count=0;
foreach($temp as $key => $value)
{
    $res[$count]['price']=$key;
    $res[$count]['qty']=$value;
    $res[$count]['total']=$key*$value;
    $count++;
}

答案 2 :(得分:0)

好的,这是一个简单的完整代码来解决您的问题。

$output=array();//this is your array
$price_index=array();
$final_array=array();
foreach($output as $key=>$value)
{
    //first check if price is already in $price_index
    if(!isset($price_index[$value["price"]]))
    {
        $price_index[$value["price"]]=sizeof($price_index);
    }
    $final_index=$price_index[$value["price"]];
    if(isset($final_array[$final_index]))
    {
        $final_array[$final_index]["total"]+=$value["total"];
        $final_array[$final_index]["qty"]+=$value["qty"];
    }
    else
    {
        $final_array[$final_index]["total"]=$value["total"];
        $final_array[$final_index]["qty"]=$value["qty"];
        $final_array[$final_index]["price"]=$value["price"];
    }
}
//display our final array
print_r($final_array);

我做了什么:

  • 遍历您的数组
  • 检查当前价格是否已添加到$ final_array之前,方法是创建包含price作为键的$ price_index数组,该值是第一次价格发生时$ output数组的索引。
  • 现在如果价格再次出现,$ price_index [当前价格]将被检测到之前已经设置过,那么我们将使用该值作为$ final_array的索引,并将当前总数和数量添加到现有
  • 然后显示数组(可选)。

希望它有所帮助。请不要只复制我的代码,分析并理解它的配偶:)