数组
/**
*説明: $input_arr を結合し、すべての組み合わせを含む配列を返します
*パラメータ: $input_arr 操作オブジェクト、$delimit 組み合わせデリミタ、各組み合わせの配列ユニットの $n 個の数
*著者:surfchen@ gmail.com
*著作権:すべてのコンテンツを自由にコピーして変更してください。
**/
function getSingleComb($input_arr,$delimit,$n)
{
if ($n==1)
{
return $input_arr;
}
$c_num =getCNum($n,count($input_arr));
$new_arr=array();
while (1)
{
$r_arr=array_rand($input_arr,$n);
asort($r_arr);
foreach ($r_arr as $value)
{
$tmp_str[]=$input_arr[$value];
}
$new_str=implode($delimit,$tmp_str);
unset($tmp_str);
if (!in_array( $new_str,$new_arr))
{
$new_arr[]=$new_str;
}
if (count($new_arr)>=$c_num)
{
Break;
}
}
return $new_arr;
}
/**
*説明: 組み合わせの数を取得します (初等数学の順列と組み合わせを参照してください)
*パラメータ: $m は組み合わせのユニット数、$n はユニットの総数
*作者:surfchen@gmail. com
*著作権: すべてのコンテンツを自由にコピーおよび変更します。
**/
function getCNum($m,$n)
{
$store_m=$m;
$store_n=$n;
$dividend=1;
for ($m;$m> ;1;$m--)
{
$dividend*=$m;
}
$divisor=1;
for ($n;$n>=($store_n-$store_m+1);$n-- )
{
$divisor*=$n;
}
return $divisor/$dividend;
}
/**
*説明: $input_arr を結合し、すべての組み合わせを含む配列を返します
*パラメータ: $input_arr 操作オブジェクト、$delimit 組み合わせ区切り文字、$n_arr は配列であり、その値の範囲は 1 から count ($input_arr) までである必要があります
*作成者:surfchen@gmail.com
*著作権:すべてのコンテンツを自由にコピーし、変更してください。
**/
function getMultiComb($input_arr,$delimit,$n_arr)
{
$return_arr =array();
foreach ($n_arr as $value)
{
$return_arr=array_merge($return_arr,getSingleComb($input_arr,$delimit,$value));
}
return $return_arr;
}
$input_arr =explode(" ",'sina sohu yahoo baidu 163');
print_r(getMultiComb($input_arr," ",array(1,2,3,4)));
?>