Skip to main content

02.一维数组相同值分组实现

1 什么是"一维数组相同值分组实现" ?

就是给出一任意项的一维数组集合,找出其中相同的并归类到一个新的组中。

2 PHP的实现

/**
* 递归一维重复数组值
* @以键名为数量值
* @acces private
* @return array
*/
private function recursion_arr($arr,$data=[]) {
$unique_arr = array_unique ( $arr );
$repeat_arr = array_diff_assoc ( $arr, $unique_arr );
foreach(array_unique($repeat_arr) as $repeat_arr_val) {
$repeat_arr_key = array_search($repeat_arr_val,$unique_arr);
unset($unique_arr[$repeat_arr_key]);
}
$start_count = count($repeat_arr);
$tmp = array_unique($repeat_arr);
$executed_count = count($tmp);
$data[] = $unique_arr;
if($start_count > $executed_count) { //如果有相同的值,继续回调
$result = $this->recursion_arr($repeat_arr,$data);
return $result; //一层一层传上来
}else{
if($repeat_arr) {
$data[] = $repeat_arr;
}
return $data; //直到底层开始返回结果
}
}  
//例:
$arr = array(
  0=>1,
  1=>2,
  2=>2,
  3=>3,
  4=>3,
  5=>3,
  6=>4,
  7=>4,
  8=>4,
  9=>4,
);
$this->recursion_arr($arr);
//结果:
array(
  0=>array(
      0=>1
    ),
  1=>array(
      0=>2,
      1=>2
    ),
  2=>array(
      0=>3,
      1=>3,
      2=>3
    ),
  3=>array(
      0=>4,
      1=>4,
      2=>4,
      3=>4
    )
);