寻找数组的函数名?

时间:2014-09-15 12:47:31

标签: php arrays

我有一个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;
}

1 个答案:

答案 0 :(得分:0)

评论帮助我找到功能名称。

这是stackoverflow上一个答案的链接 Finding the subsets of an array in PHP

指的是php手册 http://php.net/manual/en/function.shuffle.php#88408