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
一个简单计数器的源代码
Oct 09 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
joomla jce editor 解决上传中文名文件失败问题
Jun 09 PHP
php获取远程文件大小
Oct 20 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
PHP 断点续传实例详解
Nov 11 PHP
Laravel框架基于ajax实现二级联动功能示例
Jan 17 PHP
PHP实现数组和对象的相互转换操作示例
Mar 20 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
laravel开发环境homestead搭建过程详解
Jul 03 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
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
[17:36]VG战队纪录片
2014/08/21 DOTA
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
使用python实现tcp自动重连
2017/07/02 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Python实现DDos攻击实例详解
2019/02/02 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
python各层级目录下import方法代码实例
2020/01/20 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
前端canvas水印快速制作(附完整代码)
2019/09/19 HTML / CSS
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
Java和Javasciprt的区别
2012/09/02 面试题
师德师风演讲稿
2014/05/05 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
2015年消费者权益日活动总结
2015/02/09 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python