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));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章