合并多个数组,以便有多种选择

时间:2018-11-05 21:33:23

标签: php arrays laravel multidimensional-array

所以说我有这个数组:

SetOnKeyListener()

您将如何结合所有可能性,以便获得: 红色小,红色中,红色大,蓝色小,蓝色中,蓝色大,绿色小,绿色中,绿色大。而且,阵列不一定总是相同的大小。

该项目是使用php专门使用laravel框架编写的

1 个答案:

答案 0 :(得分:2)

要适应多种变体,

function getVariants($obj)
{
    $variant = array_shift($obj["variants"]); // we use the variants as a stack
    $results = array(); // we will store the results here
    foreach($variant["options"] AS $k=>$v) // we iterate the current variants
    {
        if(count($obj["variants"]) > 0) // if we have more variants still
        {
            $sub = getVariants($obj); // we call getVariants to build next level
            foreach($sub AS $sub_v) // iterate over the results of the child level
            {
                // concatenate whatever came from children to the current names
                $results[] = $v["name"]." ".$sub_v; 
            }
        }
        else
        {
            $results[] = $v["name"]; // this is the last variant so we just add the names.
        }
    }
    return $results;
}

这应该可以与所需的任何深度的组合一起使用。

此代码的作用是将变体用作处理变体的堆栈,然后,如果堆栈不再较长,则仍将自己调用以在下一级执行相同操作。每个级别都会返回一组自己及其子级(如果有)。

https://en.wikipedia.org/wiki/Recursion_(computer_science)