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

这篇文章主要介绍了PHP实现数组的笛卡尔积运算,结合实例形式分析了php数组的笛卡尔积运算相关实现与使用技巧,需要的朋友可以参考下。

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

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

  1. $arr = array(
  2. array(2),
  3. array(6,7),
  4. array('a','b','c')
  5. );
  6. function dikaer($arr){
  7. $arr1 = array();
  8. $result = array_shift($arr);
  9. while($arr2 = array_shift($arr)){
  10. $arr1 = $result;
  11. $result = array();
  12. foreach($arr1 as $v){
  13. foreach($arr2 as $v2){
  14. if(!is_array($v))$v = array($v);
  15. if(!is_array($v2))$v2 = array($v2);
  16. $result[] = array_merge_recursive($v,$v2);
  17. }
  18. }
  19. }
  20. return $result;
  21. }

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

  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => 2
  6. [1] => 6
  7. [2] => a
  8. )
  9. [1] => Array
  10. (
  11. [0] => 2
  12. [1] => 6
  13. [2] => b
  14. )
  15. [2] => Array
  16. (
  17. [0] => 2
  18. [1] => 6
  19. [2] => c
  20. )
  21. [3] => Array
  22. (
  23. [0] => 2
  24. [1] => 7
  25. [2] => a
  26. )
  27. [4] => Array
  28. (
  29. [0] => 2
  30. [1] => 7
  31. [2] => b
  32. )
  33. [5] => Array
  34. (
  35. [0] => 2
  36. [1] => 7
  37. [2] => c
  38. )
  39. )

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

  1. function dikaer($arr){
  2. $arr1 = array();
  3. $result = array_shift($arr);
  4. while($arr2 = array_shift($arr)){
  5. $arr1 = $result;
  6. $result = array();
  7. foreach($arr1 as $v){
  8. foreach($arr2 as $v2){
  9. $result[] = $v.','.$v2;
  10. }
  11. }
  12. }
  13. return $result;
  14. }

输出结果如下所示:

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