Php 在数组中查找匹配项

Php 在数组中查找匹配项,php,arrays,multidimensional-array,array-intersect,Php,Arrays,Multidimensional Array,Array Intersect,我肯定这件事很简单 我有两个数组 $post\u cats这是任何给定帖子所属的类别 $ad_cats这是放置广告的类别数组 基本上,如果一篇文章的选定类别数组中有一个类别与广告类别数组中的项目相匹配,那么它必须返回匹配的值/项目 $post\u cats返回此 array(4) { [0]=> array(1) { ["slug"]=> string(6) "energy" } [1]=> array(1) { ["slug"]=> stri

我肯定这件事很简单

我有两个数组

  • $post\u cats
    这是任何给定帖子所属的类别
  • $ad_cats
    这是放置广告的类别数组
基本上,如果一篇文章的选定类别数组中有一个类别与广告类别数组中的项目相匹配,那么它必须返回匹配的值/项目

$post\u 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" }  
}
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" }  
}
并且
$ad_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" }  
}
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" }  
}
那里的重复项是“south”,因此在我看来,
array\u intersect($post\u cats,$ad\u 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\u 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函数处理这类事情是一个很好的选择。

此解决方案用于获取这些值并获取它们的交集

function mapper($a) 
{
    return $a['slug'];
}

$set1 = array_map('mapper', $post_cats);
$set2 = array_map('mapper', $ad_cats);
$result = array_intersect($set1, $set2);

用于测试。

array\u intersect
无法按照多维数组的预期工作。是否也复制了“全局”副本?@nickb好的,那么您可以帮助我使用什么吗?这比我的猫在键盘上跳跃编写的脚本有更多语法错误。仍然错误。你把这些数组看成是一维数组,它们是二维的。@Jueecy:是的,我必须承认我没有完全阅读这个问题,只是很快写了这个例子。。。但它似乎对马克有用,如果不行,让我知道我会更新它。。。