比较嵌套数组是否相等

时间:2012-09-18 11:33:28

标签: php arrays multidimensional-array

给出以下数组:

$array[0]['tid'] = 'valueX';
$array[1]['tid'] = 'valueY';

$array2[0]['tid'] = 'valueZ';
$array2[1]['tid'] = 'valueY';

我的目标是检查$array中的任何值是否在$array2

以下是我想出的内容,但我想知道是否有更简单/更好的解决方案? 也许某些东西只能获取数组的值或删除'tid'键。

foreach($array as $arr) {
    $arr1[] = $arr['tid'];
}

$flag = 0;

foreach($array2 as $arr) {
    if( in_array( $arr['tid'], $arr1 ) ) {
        $flag++;
    }
}
echo $flag; // number of duplicates

3 个答案:

答案 0 :(得分:3)

您可以采用的一种方法:

$extractor = function($row) { return $row['tid']; };
echo "Duplicates: ".count(array_intersect(
    array_map($extractor, $array),
    array_map($extractor, $array2)
));

这样做是从两个数组上的每个数组元素中提取tid值,然后将结果相交(以查找两个数组中存在的值)。根据你打算做什么来调整它或保持中期结果可能是有意义的。

See it in action

答案 1 :(得分:1)

您可以尝试使用array_map从数组中提取值。

然后可以使用in_array函数循环转换后的数组。更好的是,你可以使用array_intersect来返回两个转换数组共有的元素。

您可能还会发现flattening您的数组有时会产生一个快速而肮脏的解决方案,尽管PHP(据我所知)没有内置函数,因此链接已发布有多种变体。

答案 2 :(得分:0)

如果您只想要与您发布的代码匹配的数量

您可以尝试使用array_map来提取值

array_map(function($array){return $array['tid']}, $inputArray())