php教程

超轻量级php框架startmvc

PHP实现数组的笛卡尔积运算示例

更新时间:2020-03-25 23:31:46 作者:startmvc
本文实例讲述了PHP实现数组的笛卡尔积运算。分享给大家供大家参考,具体如下:数组的笛

本文实例讲述了PHP实现数组的笛卡尔积运算。分享给大家供大家参考,具体如下:

数组的笛卡尔积在实际中还是挺有用处的,比如计算商品的规格时就经常用到,下面写一种实现方式,如下代码


$arr = array(
 array(2),
 array(6,7),
 array('a','b','c')
);
function dikaer($arr){
 $arr1 = array();
 $result = array_shift($arr);
 while($arr2 = array_shift($arr)){
 $arr1 = $result;
 $result = array();
 foreach($arr1 as $v){
 foreach($arr2 as $v2){
 if(!is_array($v))$v = array($v);
 if(!is_array($v2))$v2 = array($v2);
 $result[] = array_merge_recursive($v,$v2);
 }
 }
 }
 return $result;
}

以上例子输出的结果如下:


Array
(
 [0] => Array
 (
 [0] => 2
 [1] => 6
 [2] => a
 )
 [1] => Array
 (
 [0] => 2
 [1] => 6
 [2] => b
 )
 [2] => Array
 (
 [0] => 2
 [1] => 6
 [2] => c
 )
 [3] => Array
 (
 [0] => 2
 [1] => 7
 [2] => a
 )
 [4] => Array
 (
 [0] => 2
 [1] => 7
 [2] => b
 )
 [5] => Array
 (
 [0] => 2
 [1] => 7
 [2] => c
 )
)

如果需要输出字符串形式的结果可以把代码改成这样


function dikaer($arr){
 $arr1 = array();
 $result = array_shift($arr);
 while($arr2 = array_shift($arr)){
 $arr1 = $result;
 $result = array();
 foreach($arr1 as $v){
 foreach($arr2 as $v2){
 $result[] = $v.','.$v2;
 }
 }
 }
 return $result;
}

输出结果如下所示:


Array
(
 [0] => 2,6,a
 [1] => 2,6,b
 [2] => 2,6,c
 [3] => 2,7,a
 [4] => 2,7,b
 [5] => 2,7,c
)

PHP 数组 笛卡尔积 运算