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_diff и array_intersect, но и сравнить их значения со значениями, А Не значения одного массива с ключами от других.

4 ответов


Если я правильно понимаю это:

возврат нового массива:

$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_key (руководство).

просто переверните второй массив из ключ=>значение to value= > key С array_flip() и затем сравнить ключи.

Итак, чтобы сравнить массивы 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))); 
?>