Функция массива PHP, которая возвращает подмножество для заданных ключей
Я ищу функцию массива, которая делает что-то вроде этого:
$myArray = array(
'apple'=>'red',
'banana'=>'yellow',
'lettuce'=>'green',
'strawberry'=>'red',
'tomato'=>'red'
);
$keys = array(
'lettuce',
'tomato'
);
$ret = sub_array($myArray, $keys);
где $ret:
array(
'lettuce'=>'green',
'tomato'=>'red'
);
A не имеет проблемы с записью его самостоятельно, дело в том, что я бы хотел избежать цикла foreach и использовать встроенную функцию или комбинацию встроенных функций. Мне кажется, что я использую общую и общую операцию массива - я был бы удивлен, если единственным вариантом является цикл.
Ответы
Ответ 1
Это работает:
function sub_array(array $haystack, array $needle)
{
return array_intersect_key($haystack, array_flip($needle));
}
$myArray = array(
'apple'=>'red',
'banana'=>'yellow',
'lettuce'=>'green',
'strawberry'=>'red',
'tomato'=>'red'
);
$keys = array(
'lettuce',
'tomato'
);
$ret = sub_array($myArray, $keys);
var_dump($ret);
Ответ 2
Вы можете использовать array_intersect_key, но он использует второй массив с ключами и значениями. Он вычисляет пересечение массивов с использованием ключей для сравнения
array_intersect_key
<?php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
$array3 = array('green' => '', 'blue' => '', 'yellow' => '', 'cyan' => '');
$array4 = array('green', 'blue', 'yellow', 'cyan');
var_dump(array_intersect_key($array1, $array2));
var_dump(array_intersect_key($array1, $array3));
var_dump(array_intersect_key($array1, $array4));
?>
Вышеприведенный пример выводит:
array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
}
array(2) {
["blue"]=>
int(1)
["green"]=>
int(3)
}
array(0) {
}