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
Ajax PHP分页演示
Jan 02 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
php生成RSS订阅的方法
Feb 13 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
Yii2框架中一些折磨人的坑
Dec 15 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小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
如何在symfony中导出为CSV文件中的数据
2011/10/06 PHP
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
2011/12/28 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
JS作用域链详解
2017/06/26 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
计算机科学与技术应届生求职信
2013/11/07 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
办公室经理岗位职责
2014/01/01 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL