在数组中查找匹配项
Posted
技术标签:
【中文标题】在数组中查找匹配项【英文标题】: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 好的,你能帮我看看我应该使用什么吗?
【参考方案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 用于测试。
【讨论】:
以上是关于在数组中查找匹配项的主要内容,如果未能解决你的问题,请参考以下文章