php实现笛卡尔积

关于笛卡尔积的相关概念与运算规则可以参考百度百科笛卡尔积

可用于商品规格的设计当中,如下便列出代码:

<?php

/**
 * 生成笛卡尔积的工具类
 * Class Dika
 */
class Dika
{
    /**
     * 多个数组的笛卡尔积
     *
     * @param unknown_type $data
     */
    public static function combineDika() {
        $data = func_get_args();
        $data = current($data);
        $cnt = count($data);
        $result = array();

        //获取第一个数组元素,并且将其从原数组中弹出
        $arr1 = array_shift($data);

        foreach($arr1 as $key=>$item)
        {
            $result[] = [$item];
        }

        foreach($data as $key=>$item)
        {
            //累计笛卡尔积
            $result = self::combineArray($result,$item);
        }
        return $result;
    }

    /**
     * 两个数组的笛卡尔积
     * @param unknown_type $arr1
     * @param unknown_type $arr2
     */
    public static function combineArray($arr1,$arr2) {
        $result = array();
        foreach ($arr1 as $item1)
        {
            foreach ($arr2 as $item2)
            {
                $temp = $item1;
                $temp[] = $item2;
                $result[] = $temp;
            }
        }

        return $result;
    }
}


$original = [
    [1, 2],
    [3, 4, 5],
    [6, 7, 8, 9]
];

print_r(Dika::combineDika($original));

猜你喜欢

转载自blog.csdn.net/oschina_41731918/article/details/83189078