php 多维数组按键值分类

背景:现在有一个多维数组,该数组里面的部分一维数组key值是完全一样的,现将一样的数组提取出来,用于做列表展示。

封装方法:

 1 function arrClassify($arr){
 2     $data = array();
 3     $a = 0;
 4     while ($arr){
 5         $key = $arr[0];
 6         $data[$a]['query'] = '第'.$a.'类';
 7         $data[$a]['head'] = array_keys($key);
 8         $data[$a]['value'][] = $key;
 9         unset($arr[0]);
10         $i = 1;
11         while($i <= count($arr)){
12             $result=array_diff_key($arr[$i],$key);
13             if(!$result){
14                 $data[$a]['value'][] = $arr[$i];
15                 unset($arr[$i]);
16             }
17             $i++;
18         }
19         $arr = array_values($arr);
20         $a++;
21     }
22     return $data;
23 }
封装的方法

 示例:

 1 <?php
 2 $arr = array(
 3     array(
 4         'a' => 1,
 5         'b' => 1,
 6         'c' => 1,
 7         'd' => 1,
 8     ),
 9     array(
10         'e' => 1,
11         'd' => 1,
12         'f' => 1,
13         'g' => 1,
14     ),
15     array(
16         'a' => 2,
17         'b' => 2,
18         'c' => 2,
19         'd' => 2,
20     ),
21     array(
22         'e' => 2,
23         'd' => 2,
24         'f' => 2,
25         'g' => 2,
26     ),
27     array(
28         'e' => 2,
29         'd' => 2,
30         'f' => 2,
31         'g' => 2,
32         'h' => 2,
33     ),
34     array(
35         'e' => 2,
36         'd' => 3,
37         'f' => 9,
38         'g' => 2,
39         'h' => 3,
40     ),
41 );
42 $a = arrClassify($arr);
43 var_dump($a);
测试用例

运行结果:

测试结果
 1 array (size=3)
 2   0 => 
 3     array (size=3)
 4       'query' => string '第0类' (length=7)
 5       'head' => 
 6         array (size=4)
 7           0 => string 'a' (length=1)
 8           1 => string 'b' (length=1)
 9           2 => string 'c' (length=1)
10           3 => string 'd' (length=1)
11       'value' => 
12         array (size=2)
13           0 => 
14             array (size=4)
15               'a' => int 1
16               'b' => int 1
17               'c' => int 1
18               'd' => int 1
19           1 => 
20             array (size=4)
21               'a' => int 2
22               'b' => int 2
23               'c' => int 2
24               'd' => int 2
25   1 => 
26     array (size=3)
27       'query' => string '第1类' (length=7)
28       'head' => 
29         array (size=4)
30           0 => string 'e' (length=1)
31           1 => string 'd' (length=1)
32           2 => string 'f' (length=1)
33           3 => string 'g' (length=1)
34       'value' => 
35         array (size=2)
36           0 => 
37             array (size=4)
38               'e' => int 1
39               'd' => int 1
40               'f' => int 1
41               'g' => int 1
42           1 => 
43             array (size=4)
44               'e' => int 2
45               'd' => int 2
46               'f' => int 2
47               'g' => int 2
48   2 => 
49     array (size=3)
50       'query' => string '第2类' (length=7)
51       'head' => 
52         array (size=5)
53           0 => string 'e' (length=1)
54           1 => string 'd' (length=1)
55           2 => string 'f' (length=1)
56           3 => string 'g' (length=1)
57           4 => string 'h' (length=1)
58       'value' => 
59         array (size=2)
60           0 => 
61             array (size=5)
62               'e' => int 2
63               'd' => int 2
64               'f' => int 2
65               'g' => int 2
66               'h' => int 2
67           1 => 
68             array (size=5)
69               'e' => int 2
70               'd' => int 3
71               'f' => int 9
72               'g' => int 2
73               'h' => int 3

原文地址:https://www.cnblogs.com/paopao123/p/10592545.html