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通用分页类page.php[仿google分页]
Aug 31 PHP
php生成扇形比例图实例
Nov 06 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
隐性调用php程序的方法
Jun 13 PHP
php socket通信简单实现
Nov 18 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
PHP进程同步代码实例
2015/02/12 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
使用jQuery jqPlot插件绘制柱状图
2014/12/18 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
详解Python下ftp上传文件linux服务器
2018/06/21 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
如何利用Python识别图片中的文字
2020/05/31 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
中药学自荐信
2014/06/15 职场文书
服务员岗位职责
2015/02/03 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript
利用Redis实现点赞功能的示例代码
2022/06/28 Redis