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