PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?

Posted

技术标签:

【中文标题】PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?【英文标题】:PHP: How to compare keys in one array with values in another, and return matches? 【发布时间】:2014-08-24 13:35:29 【问题描述】:

我有以下两个数组:

$array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden');

$array_two = array('colorOne', 'colorTwo', 'colorThree');

我想要一个来自 $array_one 的数组,它只包含键是 $array_two 成员的键值对(通过创建一个新数组或从 @987654324 中删除其余元素@)

我该怎么做?

我查看了 array_diffarray_intersect,但它们将值与值进行比较,而不是将一个数组的值与另一个数组的键进行比较。

【问题讨论】:

array_diff() 或 array_intersect() 结合array_keys() 【参考方案1】:

php 5.1 开始,有 array_intersect_key (manual)。

只需使用array_flip() 将第二个数组从 key=>value 翻转为 value=>key,然后比较键。

所以要比较 OP 的数组,可以这样做:

$result = array_intersect_key( $array_one , array_flip( $array_two ) );

根本不需要循环数组。

【讨论】:

好的单行解决方案,但我认为这个函数循环相同。【参考方案2】:

更新

查看 Michel 的回答:https://***.com/a/30841097/2879722。这是一个更好、更简单的解决方案。


原答案

如果我理解正确:

返回一个新数组:

$array_new = [];
foreach($array_two as $key)

    if(array_key_exists($key, $array_one))
    
        $array_new[$key] = $array_one[$key];
    

从 $array_one 中剥离:

foreach($array_one as $key => $val)

    if(array_search($key, $array_two) === false)
    
        unset($array_one[$key]);
    

【讨论】:

在内存方面什么会更快且成本更低?我认为是第二个? 是的,我会选择第二个。其中较小的数组用于比较,您正在剥离一个已经设置的变量,而不是创建一个新变量。 第二种方法是快速“AND”比较的一个非常好的建议!【参考方案3】:

告诉我它是否有效:

for($i=0;$i<count($array_two);$i++)
  if($array_two[$i]==key($array_one))
     $array_final[$array_two[$i]]=$array_one[$array_two[$i]];
     next($array_one);
  

【讨论】:

$array_final 是正在创建一个新数组吗?但是当我尝试在循环之后执行print_r($array_final); 时,我得到了Notice: Undefined variable: array_final in C:\xampp\htdocs\testsNine.php on line 14。 :s 抱歉我忘记声明了:$array_final = array(); 我确实尝试过声明它。打印一个空白数组。您还将 count($array_two) 与来自 JS 的 $array_two.length 混淆了。这也产生了一个错误。但我理解这个概念。所以谢谢你。

以上是关于PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组中的值与另一个char进行比较

数组函数-1

PHP 数组键与值反转的方法 array_flip()

将字典的键与 List 的值进行比较,并返回所有匹配的值,包括重复值

PHP如何根据数组中的键值进行排序

按属性将对象数组与另一个对象的键进行比较