2017-06-15 48 views
3

试图从嵌套数组中删除相同的同胞(叶子)/相同的数组。PHP - 删除数组中相同的同胞(叶)(从数组中删除相同的数组)

e.g

$data = [ 
     'test' => [ 
       'a' => [ 
         'b' => 'something', 
         5 => [ 
           'a' => [ 
             1 => 'test1', 
             19 => 'test2', 
             6 => 'test3', 
           ], 
           0 => 'test', 
         ], 
       ], 
       'b' => 1, 
       2 => [ 
         3 => 'something', 
         5 => 'somethingelse', 
       ], 
       4 => 'body' 
     ], 
     'anothertest' => [ 
       'b' => 1, 
       0 => [ 
         'test' => 1, 
         2 => 'something', 
         3 => 'somethingelse', 
       ], 
       1 => [ 
         'test' => 1, 
         2 => 'something', 
         3 => 'somethingelse', 
       ], 
     ], 
]; 

Array 
(
    [test] => Array 
     (
      [a] => Array 
       (
        [b] => something 
        [5] => Array 
         (
          [a] => Array 
           (
            [1] => test1 
            [19] => test2 
            [6] => test3 
           ) 

          [0] => test 
         ) 

       ) 

      [b] => 1 
      [2] => Array 
       (
        [3] => something 
        [5] => somethingelse 
       ) 

      [4] => body 
     ) 

    [anothertest] => Array 
     (
      [b] => 1 
      [0] => Array 
       (
        [test] => 1 
        [2] => something 
        [3] => somethingelse 
       ) 

      [1] => Array 
       (
        [test] => 1 
        [2] => something 
        [3] => somethingelse 
       ) 

     ) 

) 

$数据[ 'anothertest'] [0]和$数据[ 'anothertest'] [1]是相同的,所以一个已被删除。

带字符串索引的数组可以跳过。

如何在foreach键值块中比较一个数组与另一个数组。

我知道我可以将相同的数组与===运算符进行比较,但不知道如何在foreach循环中访问下一个运算符。

这是我的代码,用PSUEDOCODE块,我不知道该怎么做。

function cleansiblings($array) 
    { 
    foreach ($array as $key => $value) { 
       if (!is_string($key)) { 
        //PSEUDO CODE 
        //compare current $value to $value+1?? 
       } 
    } 

    } 

任何帮助表示赞赏。

感谢,

+0

您是否尝试过array_uniq ue功能? (http://php.net/manual/en/function.array-unique.php) – janfitz

回答

0

您可以删除多维数组重复这样

<?php 

function get_unique($array){ 
    $result = array_map("unserialize", array_unique(array_map("serialize", $array))); 
    foreach ($result as $key => $value){ 
     if (is_array($value)){ 
      $result[$key] = get_unique($value); 
     } 
    } 
    return $result; 
} 

echo "<pre/>";print_r(get_unique($data)); 

?> 

输出: - https://eval.in/817099

+0

谢谢!!!!作品! –

+0

@android_dev很高兴帮助你:) :) –

0

要回答只是你的问题的最后一部分:您可以访问原来的$ array在使用$ key的foreach循环中:

function cleansiblings($array) 
    { 
    foreach ($array as $key => $value) { 
      if (!is_string($key)) { 
       if (isset($array[$key+1])) { 
        // Compare $array[$key] (or $value, it is the same) with $array[$key+1] 
        // To remove item from array, just unset it: unset($array[$key]). 
        // Note that you can alter iterated array in PHP, 
        // but not in some other languages. 
       } 
      } 
    } 

}