У меня есть массив n-значений:
$input = array( object_a, object_b, object_c, ..., object_n );</code>
Я пытаюсь найти имя функции, которая производит этот вывод:
$output = array(
array( object_a ), array( object_b ), ..., array( object_n ),
array( object_a, object_b ), array( object_a, object_c ), ..., array( object_a, object_n ),
array( object_b, object_c ), ..., array( object_b, object_n ),
...
array( object_a, object_b, object_c), ..., array( object_a, object_b, object_n),
...
array( object_a, object_b, object_c, ..., object_n)
);
Похоже на декартово произведение, но этого не было.
Я пытаюсь запрограммировать эту функцию и успешно создаю следующую часть своих результатов, но я застрял с «средним» распределением:
$output = array(
array( object_a ), array( object_b ), ..., array( object_n ),
array( object_a, object_b, object_c, ..., object_n)
);
Я думаю, что среднюю часть можно получить с помощью рекурсивного вызова функции, но я не знаю, как это сделать.
Спасибо
Вот начало моей функции:
/**
*
* @param array $array this input array
* example:
* $array = array(
* A, B, C
* );
*
* @return array the result array
* example:
* $result = array(
* array( A ), ok
* array( B ), ok
* array( C ), ok
* array( A, B ),
* array( A, C ),
* array( B, C ),
* array( A, B, C ) ok
* )
*/
private function distribute($array)
{
$result = array();
if (is_array($array)) {
// add array( 'A', 'B', 'C' ) to result
$result[] = $array;
if (count($array)>1) {
// add array( 'A' ), array( 'B' ), array( 'C' ) to result
foreach ($array as $value) {
$result[] = array($value);
}
// help me to complete this function
}
}
return $result;
}
Комментарии помогают мне найти имя функции.
Вот ссылка на stackoverflow предыдущий ответ
Нахождение подмножеств массива в PHP
что относится к руководству PHP
http://php.net/manual/en/function.shuffle.php#88408
Других решений пока нет …