在数组中查找匹配项

时间:2013-03-08 21:16:29

标签: php arrays multidimensional-array array-intersect

绝对在这里做我认为非常简单的事情......

我有2个数组。

  • $post_cats这是任何给定帖子所属的类别。
  • $ad_cats这是一个放置广告的类别数组。

基本上,如果帖子在所选类别的数组中有一个与广告类别数组中的项匹配的类别,那么它必须返回匹配的值/项。

$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”返回给变量。

3 个答案:

答案 0 :(得分:0)

所以你正在寻找两个数组中的项目? ...

这样的事情:

function find_duplicate($array1, $array2)
{
  $list = array();

  foreach($array1 as $value1)
  {
    foreach($array2 as $value2)
    {
     if($value1 == $value2) $list[] = $value1;
    }
  }

  return $list;
}

答案 1 :(得分:0)

最好的方法是转换数组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函数处理这类事情是个不错的选择。

答案 2 :(得分:0)

此解决方案使用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);

PhpFiddle进行测试。