php 二維數組以某一鍵名進行分組相加_PHP教程

來源:互聯網
上載者:User
本文章來給各位同學介紹一篇關於php 二維數組以某一鍵名進行分組相加執行個體程式,希望此教程對各位同學會有所協助。

如題,如果是從資料庫裡取資料的時候大可以

SELECT SUM(t_value),t_id FROM t_table GROUP BY t_id

但是如果是在php程式中處理類似的問題就稍微麻煩點了,這裡給個函數就是處理類似的問題

代碼如下 複製代碼

/* 函數功能:對二維數組以某一鍵名進行分組相加,返回新的二維數組

* 參數說明:$arr-源數組;$new_arr-相加後得到的新數組;$target_key-要分組的鍵名

*/

function add_array($arr, &$new_arr, $target_key) {

$num = count($new_arr); //計算新數組的大小,新數組也是二維的,這裡計算的是第一維

for ($i = 0; $i < $num; $i++) {

//迴圈新數組

//if塊主要判斷當前分組的鍵名是否已經存在於新數組中,避免重複

//由於該函數是被迴圈調用的,而新數組可能有多於1個的元素,所以必須對新數組中的每一個元素都進行比較,

//新數組的元素是一個一維數組,$i動態比較新的二維數組中的分組鍵名

if ($arr[$target_key] != $new_arr[$i][$target_key]) {//判斷新數組中的分組鍵名是否跟當前源數組中的分組鍵名相等

$cmp_num++; //如果不相等,比較次數自增1

} else {//如果相等,說明當前分組鍵名已經存在

$tar_exist = true; //設定存在標識為true

$tar_key = $i; //返回當前分組鍵名在新數組中的數字索引

break; //跳出迴圈

}

}

//如果比較次數跟新數組大小一樣,說明當前分組鍵名不在新數組中,設定存在標識為false

if ($cmp_num == $num)

$tar_exist = false;

if ($tar_exist) {//如果分組鍵名已經存在,對該分組的數組元素進行相加

foreach ($arr as $key => $value) {

if ($key != $target_key) {//分組鍵名對應的元素值不相加

$new_arr[$tar_key][$key]+=$value; //其餘的元素值進行相加

}

}

} else {

//如果分組鍵名不存在

//設定新的分組鍵名,並對該分組的數組元素進行相加

//新數組的第一維使用$num參數來分辨當前分組的秩序

//由於$num實際上就是新數組中,按鍵名分組的個數,並且是從0開始,所以新的分組在新數組中的索引直接用$num即可,

//而不須要$num+1

$new_arr[$num][$target_key] = $arr[$target_key];

foreach ($arr as $key => $value) {

if ($key != $target_key) {//分組鍵名對應的元素值不相加

$new_arr[$num][$key]+=$value; //其餘的元素值進行相加

}

}

}

}

$arr = array(

array('group_id' => 13, 'team_price' => 88.00, 'satopay_price' => 85.00, 'team_id' => 348, 'origin' => 440, 'gain' => 14.45, 'quantity' => 5),

array('group_id' => 13, 'team_price' => 12.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 36, 'gain' => 2.76, 'quantity' => 3),

array('group_id' => 14, 'team_price' => 4.99, 'satopay_price' => 4.60, 'team_id' => 335, 'origin' => 4.99, 'gain' => 0.31915, 'quantity' => 1),

array('group_id' => 14, 'team_price' => 12.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84, 'quantity' => 2),

array('group_id' => 15, 'team_price' => 13.00, 'satopay_price' => 11.00, 'team_id' => 344, 'origin' => 24, 'gain' => 1.84, 'quantity' => 2),

);

$new_arr = array();

foreach ($arr as $key => $value) {

add_array($value, &$new_arr, 'group_id'); //這裡我們按group_id進行分組相加

}

var_dump($new_arr);

http://www.bkjia.com/PHPjc/632663.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632663.htmlTechArticle本文章來給各位同學介紹一篇關於php 二維數組以某一鍵名進行分組相加執行個體程式,希望此教程對各位同學會有所協助。 如題,如果是從資料...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.