-1

绝对在我确信非常简单的事情上在这里做我的头......

我有 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”返回给一个变量。

4

3 回答 3

0

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

像这样的东西怎么样:

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

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

  return $list;
}
于 2013-03-08T21:23:17.483 回答
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 函数处理这类事情是一个不错的选择。

于 2013-03-08T21:33:58.343 回答
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用于测试。

于 2013-03-08T21:41:46.193 回答