1. 程式人生 > >使用php和階乘原理 通過階乘獲取一個一維陣列中全部的組合情況

使用php和階乘原理 通過階乘獲取一個一維陣列中全部的組合情況

<?php
/**
 * 通過階乘獲取一個一維陣列中全部的組合情況
 * @param  array $arr 要被組合的一維陣列
 * @return array
 */
function getArrAllCombineByFactor($arr){
	if(count($arr) > 1){
		//儲存所有組合情況的陣列
		$combine_arr = array();

		foreach ($arr as $k => $v) {
			$tmp_arr = arrRmoveValueByKey($arr,$k);
			$son_combine_arr = getArrAllCombineByFactor($tmp_arr);

			foreach($son_combine_arr as $son_combine_v){
				$combine_arr[] = $v.$son_combine_v;
			}
		}

		return $combine_arr;
	}else{
		return $arr;
	}
}

/**
 * 通過key刪除陣列中的值
 * @param  array $arr 要被刪除的陣列
 * @param  string|int $k   要刪除的key
 * @return array      
 */
function arrRmoveValueByKey($arr,$k){
	unset($arr[$k]);
	$arr = array_values($arr);
	return $arr;
}

$arr = [1,2,3,4];
var_dump(getArrAllCombineByFactor($arr));