1. 程式人生 > 其它 >php計算多個集合的笛卡爾積例項詳解

php計算多個集合的笛卡爾積例項詳解

笛卡爾積

笛卡爾積是指在數學中,兩個集合X和Y的笛卡爾積(Cartesian product),又稱直積,表示為X*Y,第一個物件是X的成員而第二個物件是Y的所有可能有序對的其中一個成員。

假設集合A={a,b},集合B={0,1,2},則兩個集合的笛卡爾積為{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}

實現思路

先計算第一個集合和第二個集合的笛卡爾積,把結果儲存為一個新集合。

然後再用新集合與下一個集合計算笛卡爾積,依此迴圈直到與最後一個集合計算笛卡爾積。

例如有以下幾個集合,需要計算笛卡爾積

<?php $sets=array
( array('白色','黑色','紅色'), array('透氣','防滑'), array('37碼','38碼','39碼'), array('男款','女款') ); ?>

程式碼如下:

<?php /** *php計算多個集合的笛卡爾積 *Date:2017-01-10 *Author:fdipzone *Ver:1.0 * *Func *CartesianProduct計算多個集合的笛卡爾積 */ /** *計算多個集合的笛卡爾積 *@paramArray$sets集合陣列 *@returnArray */ functionCartesianProduct(
$sets){ //儲存結果 $result=array(); //迴圈遍歷集合資料 for($i=0,$count=count($sets);$i<$count-1;$i++){ //初始化 if($i==0){ $result=$sets[$i]; } //儲存臨時資料 $tmp=array(); //結果與下一個集合計算笛卡爾積 foreach($resultas$res){ foreach($sets[$i+1]as$set){ $tmp[]=$res.$set; } } //將笛卡爾積寫入結果 $result=$tmp; } return$result; } //定義集合 $sets=array
( array('白色','黑色','紅色'), array('透氣','防滑'), array('37碼','38碼','39碼'), array('男款','女款') ); $result=CartesianProduct($sets); print_r($result); ?>

輸出:

Array ( [0]=>白色透氣37碼男款 [1]=>白色透氣37碼女款 [2]=>白色透氣38碼男款 [3]=>白色透氣38碼女款 [4]=>白色透氣39碼男款 [5]=>白色透氣39碼女款 [6]=>白色防滑37碼男款 [7]=>白色防滑37碼女款 [8]=>白色防滑38碼男款 [9]=>白色防滑38碼女款 [10]=>白色防滑39碼男款 [11]=>白色防滑39碼女款 [12]=>黑色透氣37碼男款 [13]=>黑色透氣37碼女款 [14]=>黑色透氣38碼男款 [15]=>黑色透氣38碼女款 [16]=>黑色透氣39碼男款 [17]=>黑色透氣39碼女款 [18]=>黑色防滑37碼男款 [19]=>黑色防滑37碼女款 [20]=>黑色防滑38碼男款 [21]=>黑色防滑38碼女款 [22]=>黑色防滑39碼男款 [23]=>黑色防滑39碼女款 [24]=>紅色透氣37碼男款 [25]=>紅色透氣37碼女款 [26]=>紅色透氣38碼男款 [27]=>紅色透氣38碼女款 [28]=>紅色透氣39碼男款 [29]=>紅色透氣39碼女款 [30]=>紅色防滑37碼男款 [31]=>紅色防滑37碼女款 [32]=>紅色防滑38碼男款 [33]=>紅色防滑38碼女款 [34]=>紅色防滑39碼男款 [35]=>紅色防滑39碼女款 )

今天做專案用到了笛卡爾積,在網上找到了這個方法,實測非常好用,感謝作者分享,我也做個記錄,方便以後檢視。