php 几个算法

/**
     * 返回当前运行文件名
     * @acces private
     * @return string
     */
    private function run_filename() {
            $tmparr = explode(DIRECTORY_SEPARATOR,__FILE__);
            return end($tmparr);
    }

//例:
    $this->run_filename();//返回当前文件名

  

/**
     * 递归一维重复数组值
     * @以键名为数量值
     * @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
    )
);

  

posted @ 2017-12-25 14:00  不拨牙  阅读(142)  评论(0编辑  收藏  举报