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之数组学习
May 29 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
PHP表单验证内容是否为空的实现代码
Nov 14 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
PHP中的浅复制与深复制的实例详解
Oct 26 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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
雄兵连:天使彦天使彦为爱折翼,彦和炙心同时念动的誓言!
2020/03/02 国漫
DC动漫人物排行
2020/03/03 欧美动漫
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
django的csrf实现过程详解
2019/07/26 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
python db类用法说明
2020/07/07 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
基于python实现坦克大战游戏
2020/10/27 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
Ref与out有什么不同
2012/11/24 面试题
英语专业毕业个人求职自荐信
2013/09/21 职场文书
经管应届生求职信范文
2014/05/18 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
施工员岗位职责
2015/02/10 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
CAD实训总结范文
2015/08/03 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python