根据数组获取数组的所有组合-数组元素不一样

阅读次数: 213

  • A+
所属分类:建站

搜索功能中需要实现的一个算法

给一个 元素不会重复的数组,求出这个数组的所有组合 等于 !4

<?php

ini_set("max_execution_time",0);

class sort_arr{

    public $return_arr = array();

    //传递一个数组 返回新数组 依次组装名称
    public function array_sort_calc($shengyu_arr,$now_arr=array()){
        xdebug_var_dump($now_arr);

        //当前元素 组合  当前取出的元素  剩余的元素组合
        //每次走完的时候 记录 这个组合到 结果中

        //第一次 取出第一个元素
        //第二次 取出 剩余数组中的 第一个元素
        $new_now_temp = $now_arr;

        foreach ($shengyu_arr as $key=>$val){

            array_push($now_arr,$val);
            $new_shengyu_arr = $shengyu_arr;
            unset($new_shengyu_arr[$key]);
            if(count($new_shengyu_arr)<=0){
                array_push($this->return_arr,$now_arr);
                $now_arr = array();
            }else{
                $this->array_sort_calc($new_shengyu_arr,$now_arr);
            }
            $now_arr = $new_now_temp;//每次的循环结束都将是一个 结果,这里 防止出现 $now_arr 前边的循环所修改
        }
    }
}

$sort_arr = new sort_arr();
$shengyu_arr = array("a","b","c");
$sort_arr->array_sort_calc($shengyu_arr);
var_dump($sort_arr->return_arr);

/*
 * abc   a    bc   原有 空   结果 a
 * bc    b    c    原有  a  结果 ab
 * c     c    空   原有  ab  结果 abc  此时回到第二步 继续循环 此时 now_arr = ab
 *
 *
 * b   c
 * c  此时 now_arr 是什么 是 ab 啦  所以需要 在第一次循环的时候 搞个临时变量 最后再还给 now_arr
 *
 *
 * */


?>
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: