php求数组全排列,元素所有组合的方法


Posted in PHP onMay 05, 2016

本文实例讲述了php求数组全排列,元素所有组合的方法。分享给大家供大家参考,具体如下:

<?php
$source = array('pll','我','爱','你','嘿');
sort($source); //保证初始数组是有序的
$last = count($source) - 1; //$source尾部元素下标
$x = $last;
$count = 1; //组合个数统计
echo implode(',', $source), "<br>"; //输出第一种组合
while (true) {
  $y = $x--; //相邻的两个元素
  if ($source[$x] < $source[$y]) { //如果前一个元素的值小于后一个元素的值
    $z = $last;
    while ($source[$x] > $source[$z]) { //从尾部开始,找到第一个大于 $x 元素的值
      $z--;
    }
    /* 交换 $x 和 $z 元素的值 */
    list($source[$x], $source[$z]) = array($source[$z], $source[$x]);
    /* 将 $y 之后的元素全部逆向排列 */
    for ($i = $last; $i > $y; $i--, $y++) {
      list($source[$i], $source[$y]) = array($source[$y], $source[$i]);
    }
    echo implode(',', $source), "<br>"; //输出组合
    $x = $last;
    $count++;
  }
  if ($x == 0) { //全部组合完毕
    break;
  }
}
echo 'Total: ', $count, "\n";
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用php+mysql一个名片库程序
Oct 09 PHP
php日历[测试通过]
Mar 27 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
PHP之短标签开启设置
Jun 17 PHP
php的ddos攻击解决方法
Jan 08 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
php无限级分类实现方法分析
Oct 19 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
php遍历解析xml字符串的方法
May 05 #PHP
Joomla调用系统自带编辑器的实现方法
May 05 #PHP
yii2超好用的日期组件和时间组件
May 05 #PHP
Joomla语言翻译类Jtext用法分析
May 05 #PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 #PHP
joomla实现注册用户添加新字段的方法
May 05 #PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 #PHP
You might like
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
表单内同名元素的控制
2006/11/22 Javascript
JavaScript脚本性能的优化方法
2007/02/02 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
python简单商城购物车实例代码
2018/03/15 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
面向对象编程OOP的优点
2013/01/22 面试题
主要的Ajax框架都有什么
2013/11/14 面试题
设置器与访问器的定义以及各自特点
2016/01/08 面试题
办公室助理岗位职责
2013/12/25 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
医院实习接收函
2014/01/12 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
公司应聘自荐书
2014/06/14 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
老人节主持词
2015/07/04 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
解决redis批量删除key值的问题
2022/03/23 Redis
vue如何清除浏览器历史栈
2022/05/25 Vue.js