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 中使用随机数的三个步骤
Oct 09 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PHP children()函数讲解
Feb 03 PHP
php输出反斜杠的实例方法
Sep 19 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
Laravel 5.5 实现禁用用户注册示例
Oct 24 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 国漫
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php文件缓存方法总结
2016/03/16 PHP
javascript eval函数深入认识
2009/02/21 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
JS 日期比较大小的简单实例
2014/01/13 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
在Python中表示一个对象的方法
2019/06/25 Python
python版百度语音识别功能
2019/07/09 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
python logging模块的使用详解
2020/10/23 Python
PyQt实现计数器的方法示例
2021/01/18 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
Java基础面试题
2014/07/19 面试题
网页美工求职信范文
2014/04/17 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
公司门卫岗位职责
2015/04/13 职场文书
学校捐书倡议书
2015/04/27 职场文书
运动会通讯稿300字
2015/07/20 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android
python图像处理 PIL Image操作实例
2022/04/09 Python