PHP笛卡尔积实现算法示例


Posted in PHP onJuly 30, 2018

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

<?php
$arr = array(array(1,3,4,5),array(3,5,7,9),array(76,6,1,0));
/**
** 实现二维数组的笛卡尔积组合
** $arr 要进行笛卡尔积的二维数组
** $str 最终实现的笛卡尔积组合,可不写
** @return array
**/
function cartesian($arr,$str = array()){
  //去除第一个元素
  $first = array_shift($arr);
  //判断是否是第一次进行拼接
  if(count($str) > 1) {
    foreach ($str as $k => $val) {
      foreach ($first as $key => $value) {
        //最终实现的格式 1,3,76
        //可根据具体需求进行变更
        $str2[] = $val.','.$value;
      }
    }
  }else{
    foreach ($first as $key => $value) {
      //最终实现的格式 1,3,76
      //可根据具体需求进行变更
      $str2[] = $value;
    }
  }
  //递归进行拼接
  if(count($arr) > 0){
    $str2 = cartesian($arr,$str2);
  }
  //返回最终笛卡尔积
  return $str2;
}
$cartesian_product = cartesian($arr);
print_r($cartesian_product);
?>

最终输出格式

Array
(
    [0] => 1,3,76
    [1] => 1,3,6
    [2] => 1,3,1
    [3] => 1,3,0
    [4] => 1,5,76
    [5] => 1,5,6
    [6] => 1,5,1
    [7] => 1,5,0
    [8] => 1,7,76
    [9] => 1,7,6
    [10] => 1,7,1
    [11] => 1,7,0
    [12] => 1,9,76
    [13] => 1,9,6
    [14] => 1,9,1
    [15] => 1,9,0
    [16] => 3,3,76
    [17] => 3,3,6
    [18] => 3,3,1
    [19] => 3,3,0
    [20] => 3,5,76
    [21] => 3,5,6
    [22] => 3,5,1
    [23] => 3,5,0
    [24] => 3,7,76
    [25] => 3,7,6
    [26] => 3,7,1
    [27] => 3,7,0
    [28] => 3,9,76
    [29] => 3,9,6
    [30] => 3,9,1
    [31] => 3,9,0
    [32] => 4,3,76
    [33] => 4,3,6
    [34] => 4,3,1
    [35] => 4,3,0
    [36] => 4,5,76
    [37] => 4,5,6
    [38] => 4,5,1
    [39] => 4,5,0
    [40] => 4,7,76
    [41] => 4,7,6
    [42] => 4,7,1
    [43] => 4,7,0
    [44] => 4,9,76
    [45] => 4,9,6
    [46] => 4,9,1
    [47] => 4,9,0
    [48] => 5,3,76
    [49] => 5,3,6
    [50] => 5,3,1
    [51] => 5,3,0
    [52] => 5,5,76
    [53] => 5,5,6
    [54] => 5,5,1
    [55] => 5,5,0
    [56] => 5,7,76
    [57] => 5,7,6
    [58] => 5,7,1
    [59] => 5,7,0
    [60] => 5,9,76
    [61] => 5,9,6
    [62] => 5,9,1
    [63] => 5,9,0
)

小编这里参考前面一篇《JavaScript笛卡尔积超简单实现算法》,给出一个php计算笛卡尔积的超简单算法示例如下:

<?php
function cartesian($arr1,$arr2){
  $relarr = array();
  foreach($arr1 as $v1){
    foreach($arr2 as $v2){
      array_push($relarr,$v1.",".$v2);
    }
  }
  return $relarr;
}
//用法示例
$a = array('1','2','3');
$b = array('a','b',c);
print_r(cartesian($a,$b));
?>

运行结果:

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
聊天室php&amp;mysql(二)
Oct 09 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 #PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 #PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 #PHP
详解laravel安装使用Passport(Api认证)
Jul 27 #PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 #PHP
PHP实现的CURL非阻塞调用类
Jul 26 #PHP
PHP等比例压缩图片的实例代码
Jul 26 #PHP
You might like
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
input框中的name和id的区别
2016/11/16 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
Python字符转换
2008/09/06 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python 函数基础知识汇总
2018/03/09 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
python 错误处理 assert详解
2020/04/20 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
语文教学随笔感言
2014/02/18 职场文书
平安建设实施方案
2014/03/19 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
小学语文业务学习材料
2014/06/02 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
违章停车检讨书
2014/10/21 职场文书
三方协议书
2015/01/27 职场文书
2016春节慰问信范文
2015/03/25 职场文书
运动会运动员赞词
2015/07/22 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers