2015-03-31 83 views
1

你好之前,我已经试过了如何从多维数组从链接merge duplicate array values in a multidimensional array phpPHP的多维数组PHP的

但是这个答案合并重复的值合并重复的数组值仅仅只有两个重复的值工作,而不是更多的工作比两个相同的价值。所以,如果我改变了这样的代码:

$arr = array(array('id'=>1, 'email_id'=>'[email protected]', 'password'=>'test'), 
    array('id'=>2, '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; 
    } 

echo "<pre>"; 
print_r($arr); 
echo "</pre>"; 

echo "<pre>"; 
print_r($new_arr); 
echo "</pre>"; 

而我得到的结果是这样的:

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 
     (
      [0] => Array 
       (
        [id] => 2 
        [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 
       ) 

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

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

) 

回答

0

你可以用这个尝试,但它增加了额外的键(试验,通过等),但我认为这不是什么问题

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


echo "<pre>"; 
print_r($arr); 



foreach($arr as $k => $v) { 
    $new_arr[$v['password']][]=$v; 
} 
print_r($new_arr); 
echo "</pre>"; 

输出:

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

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

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

     ) 

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

     ) 

)