首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

对多个数组进展组合讨论

2013-09-15 
对多个数组进行组合讨论假设有三个数组(实际不确定多少个数组):$arr1 array(1, 2, 3, 4)$arr2 array(

对多个数组进行组合讨论
假设有三个数组(实际不确定多少个数组):
$arr1 = array(1, 2, 3, 4);
$arr2 = array(10, 20, 30, 40);
$arr3 = array(100, 200, 300, 400);

要实现的结果:
array(
    array(1,10,100),
    array(1,10,200),
    array(1,10,300),
    array(1,10,400),
    array(1,20,100),
    array(1,20,200),
    array(1,20,300),
    array(1,20,400),
    array(1,30,100),
    ...
);
不想用递归,但是也可以实现看看 排列组合
[解决办法]
array() 可简化为 [] 是 php5.4 才有的吗?我怎么记得 php5.3 就是的呢?

简单注释一下:

  $d = func_get_args();//读取传入的参数到数组(php4)
  if( count($d) < 2 ) return current($d);
  $n = array_product( array_map('count', $d) ); //array_product 计算数组值的乘积(php5),array_map 返回经回调函数处理的数组(php4)
  array_walk( $d, function(&$v, $k, $n) {//用回调函数处理数组元素(php3)闭包写法(php5.3)
      $v = array_chunk( call_user_func_array('array_merge', array_pad([$v], $n/count($v), $v)), 1);
    }, $n);//array_chunk 切割数组(php4)
      //call_user_func_array 调用指定函数并传递参数数组(php4)对执行可变参数数量的函数很有用
  foreach($d as $i=>$t) {
    if($i == 0) {
      $r = $t;
    }else {
      array_multisort(array_map(function($v) { return $v[0]; }, $r), $r);
      $r = array_map('array_merge', $r, $t);
    }
  }

[解决办法]
function my_arr_combine()
{
$args = func_get_args();
$final = array_shift($args);
while($f = array_shift($args))
{
$r = array();


foreach($final as $v)
{
foreach($f as $v2)
{
$r[] = array_merge(is_array($v)?$v:array($v),array($v2));
}
}
$final = $r;
}
return $final;
}
$arr1 = array(1, 2, 3, 4);
$arr2 = array(10, 20, 30, 40);
$arr3 = array(100, 200, 300, 400);
$data = array($arr1,$arr2,$arr3);
echo "<pre/>";
print_r(call_user_func_array('my_arr_combine', $data));

热点排行