php合并多个数组 相同元素取交集 不同元素组成数组

php合并多个数组 相同元素取交集 不同元素组成数组
渣哥 发布于 2014/01/23 22:00 阅读 3K+ 收藏 4 答案 10
PHP
求助:

数组格式是这样的:

$arr=array(
array(‘element1’=>‘a’,‘element2’=>1),
array(‘element1’=>‘b’,‘element2’=>2),
array(‘element1’=>‘a’,‘element2’=>2),
array(‘element1’=>‘b’,‘element2’=>3),
);

需要合成为:

$arr=array(
array(‘element1’=>‘a’,‘element2’=>array(1,2)),
array(‘element1’=>‘b’,‘element2’=>array(2,3)),
);

举报
0
渣哥
渣哥 2014/01/23 22:50
n e w = a r r a y ( ) ; f o r e a c h ( new = array(); foreach ( new=array();foreach(arr as $key => $value) {
n e w [ new[ new[value[‘element1’]][] = $value[‘element2’];
}
n e w 2 = a r r a y ( ) ; f o r e a c h ( new2 = array(); foreach( new2=array();foreach(new as k = > k=> k=>v){
n e w 2 [ ] = a r r a y ( ′ e l e m e n t 1 ′ = > new2[] = array('element1'=> new2[]=array(element1=>k,‘element2’=>KaTeX parse error: Expected 'EOF', got '}' at position 5: v); }̲ print_r(new2);

评论 (0) 引用此答案 举报
0
酒逍遥
酒逍遥 2014/01/24 08:39
自问自答?
评论 (0) 引用此答案 举报
0
练打字的
练打字的 2014/01/24 09:04
你这个效率啊…循环一次就够了,直接k操作,取值合并数组,完事…
评论 (0) 引用此答案 举报
0
渣哥
渣哥 2014/01/24 09:44
引用来自“cgf986916”的答案
你这个效率啊…循环一次就够了,直接k操作,取值合并数组,完事…
求更高效写法
评论 (0) 引用此答案 举报
0
tretretre0000000000
tretretre0000000000 2014/01/24 10:18
$new_array = array();
a = a r r a y ( ) ; f o r e a c h ( a = array(); foreach( a=array();foreach(arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ if(!in_array(val[‘element1’],$a)){
$a[] = $val[‘element1’];
n e w a r r a y [ new_array[ newarray[val[‘element1’]] = $val;
}else{
n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’] = array_merge(array( n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’]),array($val[‘element2’]));
}
}
n e w a r r a y = a r r a y v a l u e s ( new_array = array_values( newarray=arrayvalues(new_array);
一次循环其实还真可以。无他,练手。

评论 (1) 引用此答案 举报
练打字的
练打字的 2014/01/24 11:36
你这个不错,但是可以改进
回复 举报
0
帖子列表
帖子列表 2014/01/24 10:20
$arr=array(
array(‘element1’=>‘a’,‘element2’=>1),
array(‘element1’=>‘b’,‘element2’=>2),
array(‘element1’=>‘a’,‘element2’=>2),
array(‘element1’=>‘b’,‘element2’=>3),
);

class timer
{
private $start_time = NULL;
private $end_time = NULL;

private function getmicrotime()
{
  list($usec, $sec) = explode(" ", microtime());
  return ((float)$usec + (float)$sec);
}

function start()
{
  $this->start_time = $this->getmicrotime();
}

function stop()
{
  $this->end_time = $this->getmicrotime();
}

function result()
{
    if (is_null($this->start_time))
    {
        exit('Timer: start method not called !');
        return false;
    }
    else if (is_null($this->end_time))
    {
        exit('Timer: stop method not called !');
        return false;
    }

    return round(($this->end_time - $this->start_time), 4);
}

# an alias of result function
function time()
{
    $this->result();
}

}
// @pxv 的方法0.0343秒
$timer = new timer();
$timer->start();
i = 0 ; f o r ( i = 0; for( i=0;for(i = 0; $i<10000; $i++){
$new_array = array();
a = a r r a y ( ) ; f o r e a c h ( a = array(); foreach( a=array();foreach(arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ if(!in_array(val[‘element1’],$a)){
$a[] = $val[‘element1’];
n e w a r r a y [ new_array[ newarray[val[‘element1’]] = $val;
}else{
n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’] = array_merge(array( n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’]),array($val[‘element2’]));
}
}
n e w a r r a y = a r r a y v a l u e s ( new_array = array_values( newarray=arrayvalues(new_array);
}

$timer->stop();
echo $timer->result();

echo ‘|’;

// 我的方法0.0522秒
$timer = new timer();
$timer->start();
i = 0 ; f o r ( i = 0; for( i=0;for(i = 0; $i<10000; $i++){
a r r C h e c k = a r r a y u n i q u e ( a r r a y m a p ( f u n c t i o n ( arrCheck = array_unique(array_map(function( arrCheck=arrayunique(arraymap(function(subArr){return $subArr[‘element1’];}, $arr));
a r r R e s u l t = a r r a y ( ) ; f o r e a c h ( arrResult = array(); foreach( arrResult=array();foreach(arrCheck as $name){
t m p = a r r a y ( ) ; f o r e a c h ( tmp = array(); foreach( tmp=array();foreach(arr as KaTeX parse error: Expected '}', got 'EOF' at end of input: …r){ if(subArr[‘element1’] == $name){
$tmp[] = KaTeX parse error: Expected 'EOF', got '}' at position 29: …nt2']; }̲ } arra…arrResult, array(‘element1’ => $name, ‘element2’ => KaTeX parse error: Expected 'EOF', got '}' at position 8: tmp)); }̲ //var_dump(arrResult);
}
$timer->stop();
echo $timer->result();

echo ‘|’;

// 猴哥的方法0.0164秒
$timer = new timer();
$timer->start();
i = 0 ; f o r ( i = 0; for( i=0;for(i = 0; $i<10000; $i++){
n e w = a r r a y ( ) ; f o r e a c h ( new = array(); foreach ( new=array();foreach(arr as $key => $value) {
n e w [ new[ new[value[‘element1’]][] = $value[‘element2’];
}
n e w 2 = a r r a y ( ) ; f o r e a c h ( new2 = array(); foreach( new2=array();foreach(new as k = > k=> k=>v){
n e w 2 [ ] = a r r a y ( ′ e l e m e n t 1 ′ = > new2[] = array('element1'=> new2[]=array(element1=>k,‘element2’=>KaTeX parse error: Expected 'EOF', got '}' at position 5: v); }̲ //print_r(new2);
}
$timer->stop();
echo $timer->result();

练打字的 2014/01/24 11:38
引用来自“pxv”的答案
$new_array = array();
a = a r r a y ( ) ; f o r e a c h ( a = array(); foreach( a=array();foreach(arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ if(!in_array(val[‘element1’],$a)){
$a[] = $val[‘element1’];
n e w a r r a y [ new_array[ newarray[val[‘element1’]] = $val;
}else{
n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’] = array_merge(array( n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’]),array($val[‘element2’]));
}
}
n e w a r r a y = a r r a y v a l u e s ( new_array = array_values( newarray=arrayvalues(new_array);
一次循环其实还真可以。无他,练手。

n e w a r r a y = a r r a y ( ) ; f o r e a c h ( new_array = array(); foreach ( newarray=array();foreach(arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … isset(new_array[$val[‘element1’]])
? n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’] = array_merge(array( n e w a r r a y [ new_array[ newarray[val[‘element1’]][‘element2’]), array($val[‘element2’]))
: n e w a r r a y [ new_array[ newarray[val[‘element1’]] = $val;
}
n e w a r r a y = a r r a y v a l u e s ( new_array = array_values( newarray=arrayvalues(new_array);

https://www.oschina.net/question/244077_142022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值