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代码把全角数字转为半角数字
Dec 10 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP检测用户语言的方法
Jun 15 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
golang与PHP输出excel示例
Jul 22 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
使用php+xslt在windows平台上
2006/10/09 PHP
PHP脚本数据库功能详解(上)
2006/10/09 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
浅析php header 跳转
2013/06/17 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
python使用socket进行简单网络连接的方法
2015/04/29 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
销售行政专员职责
2014/01/03 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
如何利用map实现Nginx允许多个域名跨域
2021/03/31 Servers
python中sys模块的介绍与实例
2021/04/17 Python
golang 如何通过反射创建新对象
2021/04/28 Golang
MySQL中order by的执行过程
2022/06/05 MySQL