1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| function groupBy($array,$keys){ $i = 0; while($i < sizeof($array)){ $x = sizeof($array) - 1; while ($x > $i) { $temp = array_intersect_assoc($array[$i],$array[$x]); if(!empty($temp)){ if(array_intersect_assoc($keys,array_keys($temp)) == $keys){ foreach ($array[$i] as $k => $v) { if(!in_array($k,$keys)){ $array[$i][$k] += $array[$x][$k]; } } array_splice($array,$x,1); } } $x--; } $i++; } return $array; }
$arr = array( array( 'province' => 'Guangdong', 'city' => 'Guangzhou', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Guangdong', 'city' => 'Guangzhou', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Guangdong', 'city' => 'Guangzhou', 'num1' => 33, 'num2' => 24, 'num3' => 32, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 25, 'num2' => 115, 'num3' => 423, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 0, 'num2' => 15, 'num3' => 1, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 5, 'num2' => 2, 'num3' => 4, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 5, 'num2' => 2, 'num3' => 4, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 5, 'num2' => 2, 'num3' => 4, ), array( 'province' => 'Guangdong', 'city' => 'Guangzhou', 'num1' => 1, 'num2' => 2, 'num3' => 3, ), array( 'province' => 'Shanghai', 'city' => 'Shanghai', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Jiangsu', 'city' => 'Nanjing', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Henan', 'city' => 'Zhengzhou', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Hunan', 'city' => 'Changsha', 'num1' => 25, 'num2' => 15, 'num3' => 43, ), array( 'province' => 'Hunan', 'city' => 'Changsha', 'num1' => 3, 'num2' => 4, 'num3' => 5, ), ); $keys = array( 'province', 'city' ); $arr = groupBy($arr,$keys);
|