Php

PHPの順列と組み合わせ



Php Permutation Combination



順列と組み合わせのいくつかの例:[再帰的]

1.出典: 配列を配置および結合するためのPHPアルゴリズム|マラボーイ



function array_comb($array, $n) { $results = [] // case $n == 1, give straightforward result if ($n == 1) { foreach ($array as $key => $value) $results[] = array($key => $value) return $results } // case $n > 1 // sort the array by key to make key comparison possible later ksort($array) // get combination results for n - 1 array, where m is count of array elements $subarray = array_slice($array, 1, null, true) $subarray_results = array_comb($subarray, $n - 1) // cross merge the m array elements with n - 1 array results foreach ($array as $key => $value) foreach ($subarray_results as $subarray_result) if ($key $subarray_result))) $results[] = array($key => $value) + $subarray_result return $results }

結果は次のとおりです。

# Suppose you execute array_comb(['[1:1]','[2:2]','[3:3]'], 2) and var_dump array (size=3) 0 => array (size=2) 0 => string '[1:1]' (length=5) 1 => string '[2:2]' (length=5) 1 => array (size=2) 0 => string '[1:1]' (length=5) 2 => string '[3:3]' (length=5) 2 => array (size=2) 1 => string '[2:2]' (length=5) 2 => string '[3:3]' (length=5) # Modify the previous line of return, namely $results[] = array($key => $value) + $subarray_result # change into $results[] = $value . ',' . $subarray_result[key($subarray_result)] #-------------------------------------------------------------------# # Get another result: array (size=3) 0 => string '[1:1],[2:2]' (length=11) 1 => string '[1:1],[3:3]' (length=11) 2 => string '[2:2],[3:3]' (length=11)

二、



function getCombinArrayByLength($arr, $len, $t = []) { if ($len == 0) { return [$t] } $result = [] for ($i = 0, $l = count($arr) $i <= $l - $len $i++) { $tmp = getCombinArrayByLength(array_slice($arr, $i + 1, $l, false), $len - 1, array_merge($t, array($arr[$i]))) $result = array_merge($result, $tmp) } return $result }

結果は次のとおりです。

0 => array (size=2) 0 => string '[1:1]' (length=5) 1 => string '[2:2]' (length=5) 1 => array (size=2) 0 => string '[1:1]' (length=5) 1 => string '[3:3]' (length=5) 2 => array (size=2) 0 => string '[2:2]' (length=5) 1 => string '[3:3]' (length=5)

三、

function getCombinationToString($arr, $m) { $result = array() if ($m == 1) { return $arr } if ($m == count($arr)) { $result[] = implode(',', $arr) return $result } $tmp = $arr[0] unset($arr[0]) $arr = array_values($arr) $temp_list1 = getCombinationToString($arr, ($m - 1)) foreach ($temp_list1 as $s) { $s = $tmp . ',' . $s $result[] = $s } unset($temp_list1) $temp_list2 = getCombinationToString($arr, $m) foreach ($temp_list2 as $s) { $result[] = $s } unset($temp_list2) return $result }

結果は次のとおりです。



# Directly the combined string array (size=3) 0 => string '[1:1],[2:2]' (length=11) 1 => string '[1:1],[3:3]' (length=11) 2 => string '[2:2],[3:3]' (length=11)