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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php导出word格式数据的代码实例
Nov 25 PHP
php短址转换实现方法
Feb 25 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
php输出含有“#”字符串的方法
Jan 18 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
May 05 PHP
php解决安全问题的方法实例
Sep 19 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
2016/06/24 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python三元运算符实现方法
2013/12/17 Python
Python变量和字符串详解
2017/04/29 Python
python验证码识别实例代码
2018/02/03 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Django models filter筛选条件详解
2020/03/16 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
暑假实习求职信范文
2013/09/22 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
党员活动总结
2015/02/04 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
SpringBoot Http远程调用的方法
2022/08/14 Java/Android