有一个字符数组,数组元素各不重复,例如 $char = array('a','b','c','d','e');如何求出该数组的所有子数组,子数组的定义是各种可能的元素组合,例如{'a'},{'b'},{'c'},{'a','b'}........个人的想法是,用一个n位的二进制表示各元素的状态,例如对于10101表示a,c,e在子数组中,而d,b不在数组中。这样的话只需要1-2^n循环,就能求出所有的子数组。大致写了下代码,不知道有没有更好的算法。请指教。<?php
$arr = array('a','b','c','d','e');
$result = array();
for($i = 1;$i<pow(2,count($arr));$i++){
$t = array();
$numcode = sprintf("%05s",decbin($i));
echo $numcode."<br/>";
for($j = 0;$j<strlen($numcode);$j++){
if($numcode{$j} == '1'){
$t[] = $arr[$j];
}
}
$result[] = $t;
}
echo "<pre>";
print_r($result);
echo "</pre>";
$arr = array('a','b','c','d','e');
$result = array();
for($i = 1;$i<pow(2,count($arr));$i++){
$t = array();
$numcode = sprintf("%05s",decbin($i));
echo $numcode."<br/>";
for($j = 0;$j<strlen($numcode);$j++){
if($numcode{$j} == '1'){
$t[] = $arr[$j];
}
}
$result[] = $t;
}
echo "<pre>";
print_r($result);
echo "</pre>";
解决方案 »
- 【100分求助】PHP怎么实现图片的分页显示?
- php数据库可以连接成功,但是语句总是执行不了,急救!谢谢!
- PHP如何获取jquery评分的结果
- php 静态页请教..
- 初学PHP: iis 配置php完后,运行时出现 php must load php_mbstring.dll module
- 专业的php程序员请举手
- 怎样在apache服务器下,用php获得客户机ip?小弟先谢过了
- php 中有没有类似 asp 中 session.timeout 的功能来在程序中设置 session 超时时限?
- 如何使用PHP获得当前页面的地址???
- MYSQL数据库中,直接统计一个text字段的长度和将text字段的长度写入到一个字段中读去,这两种方式哪种速度快一点?
- 百度了好久 都没有找到办法 特来请教
- if..else 与 ? : 的问题
//获取组合的个数
function composeList($from = array(), $num = 0, $to = array()){
global $ar;
if(($count = count($to)) == $num){
$ar[] = implode('', $to);
return ;
}
if($num < 0 || ($count == 0 && count($from) < $num)){
echo 'Err';
return ;
}
foreach($from AS $k => $v){
$to[] = $v;
unset($from[$k]);
composeList($from, $num, $to);
array_pop($to);
}
}$arr = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
$ar = array();
composeList($arr, 4);
echo '<pre>';print_r($ar);