0

给定以下数组:

$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
4

3 回答 3

3

一种方法可以解决这个问题:

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

这样做是tid从两个数组的每个数组元素中提取值,然后将结果相交(以查找两个数组中存在的值)。根据您打算做什么,稍微调整一下或保留中间结果可能是有意义的。

看到它在行动

于 2012-09-18T11:38:47.437 回答
1

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

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

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

于 2012-09-18T11:38:16.980 回答
0

如果您只想有多少与您发布的代码匹配

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

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

于 2012-09-18T11:40:20.553 回答