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

PHP:如何将一个数组中的键与另一个数组中的值进行比较,并返回匹配项?,php,arrays,compare,array-difference,array-intersect,Php,Arrays,Compare,Array Difference,Array Intersect,我有以下两个阵列: $array_one = array('colorZero'=>'black', 'colorOne'=>'red', 'colorTwo'=>'green', 'colorThree'=>'blue', 'colorFour'=>'purple', 'colorFive'=>'golden'); $array_two = array('colorOne', 'colorTwo', 'colorThree'); 我想要一个来自$arra

我有以下两个阵列:

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

$array_two = array('colorOne', 'colorTwo', 'colorThree');
我想要一个来自
$array\u one
的数组,该数组只包含键为$array\u two成员的键值对(创建新数组或从
$array\u one
中删除其余元素)

我该怎么做

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

告诉我它是否有效:

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);
  }
}

for($i=0;$i如果我理解正确:

返回新数组:

$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]);
    }
}

从PHP5.1开始,就有了
array\u intersect\u key
()

只需使用
array\u flip()
将第二个数组从key=>value翻转到value=>key,然后比较键

因此,要比较OP的阵列,可以这样做:

$result = array_intersect_key( $array_one , array_flip( $array_two ) );
根本不需要对阵列进行任何循环。


array\u diff()或array\u intersect()与
$array\u final
组合在一起是一个正在创建的新数组吗?但是我得到了
注意:当我尝试执行
打印($array\u final)时,在第14行的C:\xampp\htdocs\testsNine.php中未定义变量:array\u final
在循环之后。:ssorry我忘了声明它:$array\u final=array();我确实尝试过声明它。这会打印一个空白数组。您还混淆了计数($array\u two)
使用JS中的
$array\u two.length
。这也产生了一个错误。但是我理解这个概念。所以谢谢你。在内存方面,什么会更快、成本更低?我想是第二个?是的,我会选择第二个。在其中,较小的数组用于比较,你正在剥离一个已经设置好的变量,而不是创建一个一个新的。很好的一行解决方案,但我认为这个函数循环相同。这是最简单的方法。谢谢。添加一些解释。这个答案对我两年前的答案有什么补充吗?