给出以下数组:
$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
答案 0 :(得分:3)
您可以采用的一种方法:
$extractor = function($row) { return $row['tid']; };
echo "Duplicates: ".count(array_intersect(
array_map($extractor, $array),
array_map($extractor, $array2)
));
这样做是从两个数组上的每个数组元素中提取tid
值,然后将结果相交(以查找两个数组中存在的值)。根据你打算做什么来调整它或保持中期结果可能是有意义的。
答案 1 :(得分:1)
您可以尝试使用array_map从数组中提取值。
然后可以使用in_array函数循环转换后的数组。更好的是,你可以使用array_intersect来返回两个转换数组共有的元素。
您可能还会发现flattening您的数组有时会产生一个快速而肮脏的解决方案,尽管PHP(据我所知)没有内置函数,因此链接已发布有多种变体。
答案 2 :(得分:0)
如果您只想要与您发布的代码匹配的数量
您可以尝试使用array_map来提取值
array_map(function($array){return $array['tid']}, $inputArray())