如何计算/生成一个包含数组中所有可能值的字符串?

时间:2011-09-07 14:47:38

标签: php

这让我疯了,但我现在正在努力解决这个问题(即格林威治标准时间+2;))。

我想做一个公平的事情(我相信,但事实证明它已经证明了......)简单的任务。

假设我有一个看起来像这样的数组:

Array
(
    [0] => Array
        (
            [OptionID] => 8748
            [Values] => Array
                (
                    [0] => 11614
                    [1] => 11615
                )
        )
    [1] => Array
        (
            [OptionID] => 8749
            [Values] => Array
                (
                    [0] => 11616
                    [1] => 11617
               )
        )
)

此阵列用于生成产品的所有可能选项。让我们说OptionID 8748的意思是'大小',那个数组中的值是'L'和& 'XL'。 OptionID 8749可以是'Color',其值为'Red'和'Black'。

我想完成一项简单的任务,即将该产品的四种独特组合放在一个字符串中:

11614 + 11616 11614 + 11617 11615 + 11616 11615 + 11617

然而,使用不同的产品可能会有第三种产品选择,所以它应该可以无限深度地工作。

1 个答案:

答案 0 :(得分:1)

基本上

  $result = array_cartesian(array_pluck($a, 'Values'));

以下是辅助函数:

function array_pluck($a, $key) {
    $r = array();
    foreach($a as $v)
        $r[] = $v[$key];
    return $r;
}

function array_cartesian($_) {
    if(count($_) == 0)
        return array(array());
    $a = array_shift($_);
    $c = array_cartesian($_);
    $r = array();
    foreach($a as $v)
        foreach($c as $p)
            $r[] = array_merge(array($v), $p);
    return $r;
}