PHP 递归处理数组,并组合成新的数组 50
$arr['Shape']=array(0=>'a',1=>'a1',2=>'a2',3=>'a3');$arr['Col']=array(0=>'b',1=>'b1',...
$arr['Shape'] = array(0 => 'a', 1 => 'a1', 2 => 'a2', 3 => 'a3');
$arr['Col'] = array(0 => 'b', 1 => 'b1', 2 => 'b2', 3 => 'b3', 4 => 'b4');
....
把这些数组,组合成(a,b,e,f)(a,b1,e1,f1)(a,b2,e2,f2) (a,b3,e3,f3)
,然后是a1组合(a1,b,e,f)(a1,b1,e1,f1)(a1,b2,e2,f2) (a1,b3,e3,f3)
,然后是a2,a3,下面的数组如果有多的数据,也要匹配出来如有b4的, (a,b4,e,f)(a,b4,e1,f1)(a,b4,e2,f2)
(a,b4,e3,f3),然后是a1的b4
(a1,b4,e,f)(a1,b4,e1,f1)(a1,b4,e2,f2) (a1,b4,e3,f3),这样的,希望大神帮帮忙,这里我逻辑短路,绕不过来了。 展开
$arr['Col'] = array(0 => 'b', 1 => 'b1', 2 => 'b2', 3 => 'b3', 4 => 'b4');
....
把这些数组,组合成(a,b,e,f)(a,b1,e1,f1)(a,b2,e2,f2) (a,b3,e3,f3)
,然后是a1组合(a1,b,e,f)(a1,b1,e1,f1)(a1,b2,e2,f2) (a1,b3,e3,f3)
,然后是a2,a3,下面的数组如果有多的数据,也要匹配出来如有b4的, (a,b4,e,f)(a,b4,e1,f1)(a,b4,e2,f2)
(a,b4,e3,f3),然后是a1的b4
(a1,b4,e,f)(a1,b4,e1,f1)(a1,b4,e2,f2) (a1,b4,e3,f3),这样的,希望大神帮帮忙,这里我逻辑短路,绕不过来了。 展开
1个回答
2015-07-13
展开全部
/**
* 多维数组递归合并
*/
function multimerge(){
$arrs = func_get_args();
$merged = array();
while($arrs){
$array = array_shift($arrs);
if(!$array){
continue;
}
foreach ($array as $key => $value){
if (is_string($key)){
if (is_array($value) && array_key_exists($key, $merged) && is_array($merged[$key])){
$merged[$key] = call_user_func(__FUNCTION__, $merged[$key], $value);
}else{
$merged[$key] = $value;
}
}else{
$merged[] = $value;
}
}
}
return $merged;
}
$a1 = array('user' => array('name' => 'tony', 'score' => 23));
$a2 = array('user' => array('name' => 'tony', 'score' => 255), 'name' =>'tom');
$a3 = array('user' => array('name' => 'tony', 'score' => 288, 'test' => 'abc'), 'name' =>'jack');
$result= multimerge($a1, $a2, $a3);
var_dump($result);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询