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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
php stream_get_meta_data返回值
Sep 29 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
PHP导入导出Excel代码
Jul 07 PHP
php日期操作技巧小结
Jun 25 PHP
PHP框架自动加载类文件原理详解
Jun 06 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 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 zip扩展Linux下安装过程分享
2014/05/05 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
任意位置显示html菜单
2007/02/01 Javascript
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
python数据结构之图的实现方法
2015/07/08 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
python 6行代码制作月历生成器
2020/09/18 Python
python在协程中增加任务实例操作
2021/02/28 Python
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
护理自我鉴定范文
2013/10/06 职场文书
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
园林施工员岗位职责
2013/12/11 职场文书
篝火晚会策划方案
2014/05/16 职场文书
总经理人事任命书
2014/06/05 职场文书
物业保安岗位职责
2014/07/02 职场文书
golang中的并发和并行
2021/05/08 Golang
教你怎么用python selenium实现自动化测试
2021/05/27 Python