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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP:如何比较一个数组中的键与另一个数组中的值,并返回匹配?相关的知识,希望对你有一定的参考价值。

我有以下两个数组:

$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成员的键值对(通过创建一个新数组或从$array_one中删除其余元素)

我怎样才能做到这一点?

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

答案

如果我正确理解这一点:

返回一个新数组:

$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]);
    }
}
另一答案

php 5.1开始,有array_intersect_keymanual)。

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

因此,为了比较OP的数组,这将做:

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

根本不需要任何循环数组。

另一答案

告诉我它是否有效:

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);
  }
}
另一答案

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

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

print_r(array_intersect_key($array_one, array_flip($array_two))); 
?> 

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

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

数组函数-1

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

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

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

PHP怎么搜索数组的键并查找到对应的值?