在数组中查找匹配项



我在这里绞尽脑汁,我确信这很简单…

我有两个数组。

  • $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);

相关内容

  • 没有找到相关文章

最新更新