php - 检查多维数组中存在超过 1 个子数组的值

php - check multidimensional array for values that exists in more than 1 subarray

给出以下简化的多维数组:

$input = Array 
(
    [arr1] => Array
        (
            [0] => JAN2016
            [1] => MAI2013
            [2] => JUN2014
        }
    [arr2] => Array
        (
            [0] => APR2016
            [1] => DEC2013
            [2] => JUN2014
        }
    [arr3] => Array
        (
            [0] => JAN2016
            [1] => MAI2020
            [2] => JUN2022
        }
)

我想检查存在于 1 个以上子数组中的元素。理想的输出是:

$output = Array
(
    [JUN2014] => Array
        (
            [0] => arr1
            [1] => arr2
        )
    [JAN2016] => Array
        (
            [0] => arr1
            [1] => arr3
        )
)

我目前被困在嵌套的 foreach 中,因为我需要查看外部 foreach 的所有兄弟姐妹,但不知道如何完成。

  foreach($input as $k=>$values)
  {
      foreach($values as $value)
      {
          //check if value exists in array k+1....n
          //if true, safe to output.
      } 
  }

你几乎已经完成了

$new = [];

foreach($input as $k=>$values) {
    foreach($values as $value) {
        $new[$value][] = $k;
    } 
}

$new 数组应该如您所愿

过滤子数组的扩展解决方案:

$newArray = [];
foreach($input as $k=>$values)
{
    foreach($values as $value)
    {
        $newArray[$value][] = $k;
    } 
}
print_r(array_filter(
    $newArray, 
    function($v) { return 1 < count($v); }
));

示例 fiddle here.