## PHP 根據key 給二維數組分組
> 我們經常拿到一個二維數組出來,會發現結果和自己想要的有些偏差,可能需要根據二維數組里的某個字段對數組分組。
> 先來看以下數組,
#### code
~~~
Array
(
[0] => Array
(
[id] => 1
[wo_id] => 2
[evaluate_id] => 1
[type] => 分組1
[ctime] => 2016-12-02 11:39:34
)
[1] => Array
(
[id] => 2
[wo_id] => 31
[evaluate_id] => 2
[type] => 分組1
[ctime] => 2016-12-12 11:39:50
)
[2] => Array
(
[id] => 3
[wo_id] => 31
[evaluate_id] => 4
[type] => 分組2
[ctime] => 2016-12-02 11:40:01
)
[3] => Array
(
[id] => 4
[wo_id] => 2
[evaluate_id] => 5
[type] => 分組2
[ctime] => 2016-12-07 10:21:40
)
[4] => Array
(
[id] => 5
[wo_id] => 2
[evaluate_id] => 3
[type] => 分組2
[ctime] => 2016-12-07 10:21:51
)
[5] => Array
(
[id] => 6
[wo_id] => 2
[evaluate_id] => 2
[type] => 分組3
[ctime] => 2016-12-07 10:21:56
)
[6] => Array
(
[id] => 7
[wo_id] => 4
[evaluate_id] => 2
[type] => 分組3
[ctime] => 2016-12-07 10:22:10
)
)
~~~
這里是一個很典型的例子,如果我希望把 數組中的數據 根據 type(分組) 分開處理,如果不分組,可能循環上會非常冗余,所以有了下面的一個分組函數:
~~~
function array_group_by($arr, $key)
{
$grouped = [];
foreach ($arr as $value) {
$grouped[$value[$key]][] = $value;
}
// Recursively build a nested grouping if more parameters are supplied
// Each grouped array value is grouped according to the next sequential key
if (func_num_args() > 2) {
$args = func_get_args();
foreach ($grouped as $key => $value) {
$parms = array_merge([$value], array_slice($args, 2, func_num_args()));
$grouped[$key] = call_user_func_array('array_group_by', $parms);
}
}
return $grouped;
}
~~~
/*** $arr : 二維數組
$key: 需要分組的key ***/
> 得到的結果是:
~~~
Array
(
[分組2] => Array
(
[0] => Array
(
[id] => 1
[wo_id] => 2
[evaluate_id] => 1
[ctime] => 2016-12-02 11:39:34
[type] => 分組2
)
[1] => Array
(
[id] => 2
[wo_id] => 31
[evaluate_id] => 2
[ctime] => 2016-12-12 11:39:50
[type] => 分組2
)
[2] => Array
(
[id] => 3
[wo_id] => 31
[evaluate_id] => 4
[ctime] => 2016-12-02 11:40:01
[type] => 分組2
)
)
[分組1] => Array
(
[0] => Array
(
[id] => 4
[wo_id] => 2
[evaluate_id] => 5
[ctime] => 2016-12-07 10:21:40
[type] => 分組1
)
[1] => Array
(
[id] => 5
[wo_id] => 2
[evaluate_id] => 3
[ctime] => 2016-12-07 10:21:51
[type] => 分組1
)
)
)
~~~
### 另外一個例子
先建立測試二維數組:
1.
~~~
$arr = [
[
'initial' => 'A',
'typename' => '陳端'
],
[
'initial' => 'F',
'typename' =>'編程'
],
[
'initial' => 'F',
'typename' => '屌絲'
]
]
~~~
2.
~~~
$result = []; //初始化一個數組
foreach($arr as $k=>$v){
$result[$v['initial']][] = $v; //根據initial 進行數組重新賦值
}
~~~
//$result 就是分組之后的返回值
3.
函數化:
~~~
function array_group($arr){
$result = []; //初始化一個數組
foreach($arr as $k=>$v){
$result[$v['initial']][] = $v; //根據initial 進行數組重新賦值
}
return $resut;
}
~~~
- 常用函數
- 簡單的php生成靜態html代碼
- PHP寫文件函數
- PHP生成GUID的函數
- PHP常用正則表達式匯總
- php字符串壓縮
- PHP無限分組
- PHP簡單 對象(object) 與 數組(array) 的轉換
- PHP數組常用函數
- PHP調式測試函數
- PHP常用字符串的操作函數
- mysql 常用內置函數
- PHP通用請求函數CURL封裝
- 裁剪圖片PHP代碼
- PDO操作MYSQL封裝類
- 10個實用的PHP代碼片段
- 獲取訪問者IP地址
- PHP實現發紅包程序
- PHP把文本轉換成圖片
- curl重寫php file_get_contents
- PHP生成一個隨機字符串
- PHP讀文件和寫文件
- PHP根據key 給二維數組分組
- php中curl模擬post提交多維數組
- 33個超級有用必須要收藏的PHP代碼樣例
- PHP防XSS 防SQL注入的代碼
- php常用數組array函數實例總結
- 用PHP遍歷目錄下的全部文件
- GBK2UTF8