2013-01-07 194 views
1

我有一个多维数组说,合并重复数组值在多维数组PHP

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [email_id] => [email protected] 
      [password] => test 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [email_id] => [email protected] 
      [password] => test 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [email_id] => [email protected] 
      [password] => pass 
     ) 

) 

这里上述阵列中,密码键中的两个键具有相同的值,我需要合并数组,其有重复值得到以下输出,

Array 
(
    [0] => Array 
      (
       [0] => Array 
       (
        [id] => 1 
        [email_id] => [email protected] 
        [password] => test 
       ) 

      [1] => Array 
       (
        [id] => 2 
        [email_id] => [email protected] 
        [password] => test 
       ) 
      ) 
    [1] => Array 
     (
      [id] => 3 
      [email_id] => [email protected] 
      [password] => pass 
     ) 

) 

如何做到这一点?我试过array_merge & foreach循环,但我不能得到这个输出

+0

确定只在索引'password'值的重复? –

+0

是..仅限密码 – stupid

+0

为此,您将必须使用自己的合并功能。这可以简单地使用foreach循环,这将确定是否两个数组是重复的,如果他们,使用重复数组作为一个数组 – kokx

回答

1

尝试,

$arr = array(array('id'=>1, 'email_id'=>'[email protected]', 'password'=>'test'), 
    array('id'=>2, 'email_id'=>'[email protected]', 'password'=>'test'), 
    array('id'=>3, 'email_id'=>'[email protected]', 'password'=>'pass')); 

    $new_arr = array(); 
    foreach($arr as $k => $v) { 
     if(is_array($arr[$k+1]) && $arr[$k]['password'] === $arr[$k + 1]['password']) 
      $new_arr[] = array($arr[$k], $arr[$k+1]); 
     else if(in_array_recursive($arr[$k]['password'], $new_arr) === FALSE) 
       $new_arr[] = $v; 
    } 

    function in_array_recursive($val, $arr) { 
     foreach($arr as $v) { 
      foreach($v as $m) { 
       if(in_array($val, $m)) 
        return TRUE;  
      } 
     } 
     return FALSE; 
    } 

    print_r($new_arr); 

Demo

+3

this仅在密钥相邻时才有效$ arr [$ k + 1] – vodich