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抓取https的内容的代码
Apr 06 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 PHP
PHP超全局变量实现原理及代码解析
Sep 01 PHP
PHP 99乘法表的几种实现代码
Oct 13 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中Session的概念
2006/10/09 PHP
PHP生成便于打印的网页
2006/10/09 PHP
用缓存实现静态页面的测试
2006/12/06 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
Python入门篇之数字
2014/10/20 Python
Python实现的rsa加密算法详解
2018/01/24 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
python上selenium的弹框操作实现
2020/07/13 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
Python绘制组合图的示例
2020/09/18 Python
python破解同事的压缩包密码
2020/10/14 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
韩国家庭购物网上商店:Nsmall
2017/05/07 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
SQL Server面试题
2013/04/04 面试题
linux面试题参考答案(11)
2012/05/01 面试题
团员学习总结的自我评价范文
2013/10/14 职场文书
班级出游活动计划书
2014/08/15 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
2019年警察入党转正申请书最新范文
2019/09/03 职场文书