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实现 使用PHP数组内部指针操作函数
Oct 12 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
用php实现选择排序的解决方法
May 04 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
Smarty模板常见的简单应用分析
Nov 15 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
Jun 02 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
php面试中关于面向对象的相关问题
Feb 13 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
E路文章系统PHP
2006/12/11 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
python scatter函数用法实例详解
2020/02/11 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
婚庆公司的创业计划书
2014/01/22 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
中华魂演讲稿
2014/05/13 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
新郎答谢词
2015/01/04 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
闪闪的红星观后感
2015/06/08 职场文书
运动会200米广播稿
2015/08/19 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
Django Paginator分页器的使用示例
2021/06/23 Python