我在这里绞尽脑汁,我确信这很简单…
我有两个数组。
-
$post_cats
,这是任何给定的帖子所在的类别。 -
$ad_cats
,它是放置广告的类别数组。
基本上,如果一个帖子的所选类别数组中有一个类别与广告类别数组中的一个项目相匹配,那么它必须返回匹配的值/item。
$post_cats
返回
array(4) {
[0]=> array(1) { ["slug"]=> string(6) "energy" }
[1]=> array(1) { ["slug"]=> string(6) "global" }
[2]=> array(1) { ["slug"]=> string(8) "identify" }
[3]=> array(1) { ["slug"]=> string(5) "south" }
}
和$ad_cats
返回
array(6) {
[0]=> array(1) { ["slug"]=> string(5) "north" }
[1]=> array(1) { ["slug"]=> string(5) "south" }
[2]=> array(1) { ["slug"]=> string(4) "east" }
[3]=> array(1) { ["slug"]=> string(4) "west" }
[4]=> array(1) { ["slug"]=> string(6) "global" }
[5]=> array(1) { ["slug"]=> string(8) "fallback" }
}
重复的项目有"南方",所以在我看来,array_intersect($post_cats, $ad_cats);
的值应该是一个数组与一个单一的项目-"南方",正确吗?
但是它返回的似乎是两个数组中的所有内容…我无论如何也不能使它工作。
使用上面的例子,我需要将"south"返回给一个变量
所以你正在寻找两个数组中的项目?…
这样写怎么样:
function find_duplicate($array1, $array2)
{
$list = array();
foreach($array1 as $value1)
{
foreach($array2 as $value2)
{
if($value1 == $value2) $list[] = $value1;
}
}
return $list;
}
最好的方法是将这些数组转换为array_intersect
可以使用的数组。考虑:
$a; // first array
$b; // second array
那么你会选择:
$a1 = array();
foreach ($a as $v) $a1[] = $v['slug'];
$b1 = array();
foreach ($b as $v) $b1[] = $v['slug'];
$c = array_intersect($a1, $b1);
PHP函数通常使用比你想象的更强大的算法;因此,让PHP函数处理这类事情是一个不错的选择。
此解决方案使用array_map
获取值并取
function mapper($a)
{
return $a['slug'];
}
$set1 = array_map('mapper', $post_cats);
$set2 = array_map('mapper', $ad_cats);
$result = array_intersect($set1, $set2);