如何检查多维数组是否包含相同的值?

时间:2016-09-20 21:56:08

标签: php arrays multidimensional-array

我有一个多维数组。我需要检查此数组中的任何值是否包含相同的值。如果,然后执行。检查这个的最好方法是什么,或者最简单的方式TIA

$array[] = array(5, 10, 15, 20, 25, 30);
$array[] = array(1, 2, 3, 4, 5, 6);
$array[] = array(2, 6, 8, 10, 12, 14);

Array
(
 [0] => Array
    (
        [0] => 5
        [1] => 10
        [2] => 15
        [3] => 20
        [4] => 25
        [5] => 30
   )

[1] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
        [3] => 4
        [4] => 5
        [5] => 6
    ) 

 [2] => Array
     (
       [0] => 2
       [1] => 6
       [2] => 8
       [3] => 10
       [4] => 12
       [5] => 14
    )
)

2 个答案:

答案 0 :(得分:1)

只需循环遍历数组和子阵列,使用值和外观频率填充$ isRepeated。当$ isRepeated [Certain_value]存在时,意味着在以下位置找到此值:

$array[] = array(5, 10, 15, 20, 25, 30);
$array[] = array(1, 2, 3, 4, 5, 6);
$array[] = array(2, 6, 8, 10, 12, 14);

$isRepeated = array();
foreach($array as $subArray) {
    foreach($subArray as $item) {
        if (!isset($isRepeated[$item])) {
            $isRepeated[$item] = 0;
        } else {
            $isRepeated[$item]++;
            echo "\n<br>Item $item is repeated";
        } 
    }
}

http://ideone.com/9yObII

输出:

Item 5 is repeated
Item 2 is repeated
Item 6 is repeated
Item 10 is repeated

答案 1 :(得分:1)

如果我正确理解了您的问题,那么您正在寻找一种方法来查找出现在多个内部数组中的值。?以下是两种解决方案,使用一些内置的PHP数组方法。

<强>设置

  • 使用array_merge自行展平$array(两种方法的初始步骤)

代码:

$array[] = array(5, 10, 15, 20, 25, 30);
$array[] = array(1, 2, 3, 4, 5, 6);
$array[] = array(2, 6, 8, 10, 12, 14, 5);

// 5, 10, 15, 20, 25, 30, 1, 2, 3, 4, 5, 6, 2, 6, 8, 10, 12, 14, 5
$array = call_user_func_array('array_merge', $array);

方法A

  1. $array中删除unique values的数组(已移除重复项)
  2. 通过comparing that array to the original $array
  3. 获取删除的内容(=重复项)
  4. 确保最终数组中的值appear only once
  5. 代码:

    $duplicates =
        array_unique(
            array_diff_key(
                $array,
                array_unique($array)
            )
        );
    
    // $duplicates = 5, 2, 6, 10
    

    方法B

    1. $array
    2. 中获取how many times each value appears的列表
    3. Filter该列表仅保留多次出现的值(=重复)
    4. 该列表的
    5. Get the keys(实际的$array值)
    6. 代码:

      $duplicates =
          array_keys(
              array_filter(
                  array_count_values($array),
                  function ($count) {
                      return $count > 1;
                  }
              )
          );
      
      // $duplicates = 5, 10, 2, 6