首页 > php教程 > php手册 > 正文

把$input_arr进行组合操作,并返回一个包含所有组合的数组

php中文网
发布: 2016-06-21 09:07:04
原创
1105人浏览过

数组

/**
 *描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
 *参数:$input_arr 操作对象,$delimit 组合的分割符号,$n 每个组合的数组单元数
 *作者:surfchen@gmail.com
 *版权:任意复制,修改所有内容.
**/
function getSingleComb($input_arr,$delimit,$n)
{
 if ($n==1)
 {
  return $input_arr;
 }
 $c_num=getCNum($n,count($input_arr));
 $new_arr=array();
 while (1)
 {
  $r_arr=array_rand($input_arr,$n);
  asort($r_arr);
  foreach ($r_arr as $value)
  {
   $tmp_str[]=$input_arr[$value];
  }
  $new_str=implode($delimit,$tmp_str);
  unset($tmp_str);
  if (!in_array($new_str,$new_arr))
  {
   $new_arr[]=$new_str;
  }
  if (count($new_arr)>=$c_num)
  {
   break;
  }
 }
 return $new_arr;
 
}
/**
 *描述:获得组合(请参阅初等数学的排列与组合)个数
 *参数:$m 组合的单元数,$n 单元总数
 *作者:surfchen@gmail.com
 *版权:任意复制,修改所有内容.
**/
function getCNum($m,$n)
{
 $store_m=$m;
 $store_n=$n;
 $dividend=1;
 for ($m;$m>1;$m--)
 {
  $dividend*=$m;
 }
 $divisor=1;
 for ($n;$n>=($store_n-$store_m+1);$n--)
 {
  $divisor*=$n;
 }
 return $divisor/$dividend;
}
/**
 *描述:把$input_arr进行组合操作,并返回一个包含所有组合的数组
 *参数:$input_arr 操作对象,$delimit 组合的分割符号,$n_arr 为一个数组,其值范围必须在从1到count($input_arr)之间
 *作者:surfchen@gmail.com
 *版权:任意复制,修改所有内容.
**/
function getMultiComb($input_arr,$delimit,$n_arr)
{
 $return_arr=array();
 foreach ($n_arr as $value)
 {
  $return_arr=array_merge($return_arr,getSingleComb($input_arr,$delimit,$value));
 }
 return $return_arr;
}
$input_arr=explode(" ",'sina sohu yahoo baidu 163');
print_r(getMultiComb($input_arr," ",array(1,2,3,4)));
?>



最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号