Привет всем, в основном, у меня есть массив:
array('a', 'b', 'c');
Теперь я запускаю его через функцию перестановки массива, и результат:
Array ( [0] => Array ( [0] => C ) [1] => Array ( [0] => B ) [2] => Array ( [0] => B [1] => C ) [3] => Array ( [0] => C [1] => B ) [4] => Array ( [0] => A ) [5] => Array ( [0] => A [1] => C ) [6] => Array ( [0] => C [1] => A ) [7] => Array ( [0] => A [1] => B ) [8] => Array ( [0] => B [1] => A ) [9] => Array ( [0] => A [1] => B [2] => C ) [10] => Array ( [0] => A [1] => C [2] => B ) [11] => Array ( [0] => B [1] => A [2] => C ) [12] => Array ( [0] => B [1] => C [2] => A ) [13] => Array ( [0] => C [1] => A [2] => B ) [14] => Array ( [0] => C [1] => B [2] => A ) )
Теперь мой вопрос: как я могу очистить этот массив так, чтобы:
array ( C, B ) is the same as array ( B, C )
и он удаляет второй массив
Как я могу это сделать?
EDIT … после некоторых исследований, основанных на ваших ответах, вот что я придумал:
array_walk($array, 'sort'); $array = array_unique($array); sort($array); // not necessary
Просто соберите составные массивы:
foreach ($arrays AS &$arr) { sort($arr); }
Таким образом, {"C", "B"} становится => {"B", "C"}
и {"B", "C"} становится => {"B", "C"}
которые идентичны.
array_multisort($array); array_unique($array);
Вы также можете использовать пакет груши Math_Combinatorics .
require_once 'Combinatorics.php'; $combinatorics = new Math_Combinatorics; $a = array('a', 'b', 'c'); // creating and storing the combinations for($combinations = array(), $n=1; $n<=count($a); $n++) { $combinations = array_merge($combinations, $combinatorics->combinations($a, $n)); } // test output foreach($combinations as $c) { echo join(', ', $c), "\n"; }
печать
a b c a, b a, c b, c a, b, c