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 Pear 安装及使用
Mar 19 PHP
php面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
php设计模式小结
Feb 15 PHP
php 无法加载mcrypt.dll的解决办法
Apr 03 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
php面试实现反射注入的详细方法
Sep 30 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如何将日志写进syslog
2013/06/28 PHP
PHP实现无限极分类图文教程
2014/11/25 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
原生JS实现不断变化的标签
2017/05/22 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Python实现二分查找算法实例
2015/05/26 Python
Django的session中对于用户验证的支持
2015/07/23 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
Python类的动态修改的实例方法
2017/03/24 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
会计实习生工作总结的自我评价
2013/10/07 职场文书
行政副总岗位职责
2014/02/23 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
成绩单家长意见
2015/06/03 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
浅析CSS在DevTools 中架构演变
2021/10/05 HTML / CSS
JavaScript异步操作中串行和并行
2021/11/20 Javascript
解析MySQL索引的作用
2022/03/03 MySQL
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python