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

Sol*_*ace 10 php arrays compare array-intersect array-difference

我有以下两个数组:

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

$array_two = array('colorOne', 'colorTwo', 'colorThree');
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

我看着array_diffarray_intersect,但他们比较值与值,而不是一个数组的值与其它的按键.

Mic*_*hel 21

从PHP 5.1开始,有array_intersect_key(手动).

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

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

$result = array_intersect_key( $array_one , array_flip( $array_two ) );
Run Code Online (Sandbox Code Playgroud)

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


Ska*_*son 5

如果我正确理解这一点:

返回一个新数组:

$array_new = [];
foreach($array_two as $key)
{
    if(array_key_exists($key, $array_one))
    {
        $array_new[$key] = $array_one[$key];
    }
}
Run Code Online (Sandbox Code Playgroud)

从 $array_one 中剥离:

foreach($array_one as $key => $val)
{
    if(array_search($key, $array_two) === false)
    {
        unset($array_one[$key]);
    }
}
Run Code Online (Sandbox Code Playgroud)