【问题标题】:Find matching items in array在数组中查找匹配项
【发布时间】:2013-03-08 21:16:29
【问题描述】:

我肯定会在这里为一些我确信非常简单的事情而努力......

我有 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" }  
}

那里的重复项是“south”,所以在我看来array_intersect($post_cats, $ad_cats); 的值应该是一个包含单个项的数组 - “south”,对吗?

但是它返回,看起来像,任何一个数组中的所有内容......我一辈子都无法让它工作......

使用上面的例子,我需要将“south”返回给一个变量。

【问题讨论】:

  • array_intersect 将无法按照您对多维数组的预期工作。
  • “全球”不是也重复了吗?
  • @nickb 好的,你能帮我看看我应该使用什么吗?

标签: php arrays multidimensional-array array-intersect


【解决方案1】:

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

这样的事情怎么样:

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

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

  return $list;
}

【讨论】:

  • 这比我的猫在键盘上跳写的脚本有更多的语法错误。
  • 还是错了。您将这些数组视为一维数组,它们是二维的。
  • @Jueecy:是的,我不得不承认我还没有完全阅读这个问题,只是快速编写了示例......但似乎它对 Mark 有用,如果没有,请告诉我我将更新它...
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    此解决方案使用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 用于测试。

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多