2015-02-25 1 views
2

Есть ли встроенная функция или более короткий способ извлечения элементов в новый массив, как описано здесь?Слой массива для определенных клавиш

<?php 

function arr_slice ($arr, $keys) { 
    $ret = array(); 
    foreach ($keys as $k) { $ret[$k] = $arr[$k]; } 

    return $ret; 
} 

$array = array(
    "a" => 1, 
    "b" => 2, 
    "c" => 3, 
    "d" => 4, 
); 
print_r(
    arr_slice($array, array("b", "d")) 
); 

выход

Array 
(
    [b] => 2 
    [d] => 4 
) 
+0

Есть ли определенное правило для определения того, какие ключи выводятся? Если просто используется array_filter? – DevDonkey

+0

@ MattHolbrook-Bull нужны ключи: 'array (" b "," d ")' –

+2

[array_intersect_key()] (http://www.php.net/manual/en/function.array-intersect-key.php) возможно? –

ответ

4

Да, вы можете использовать array_intersect_key, но вам нужна хеш-таблица в качестве второго аргумента.

print_r(array_intersect_key($array, array("b"=>"", "d"=>""))); 
Array 
(
    [b] => 2 
    [d] => 4 
) 
+2

'array_flip (array (" b "," d "));' или 'array_flip (['b', 'd'])' еще проще читать для второго аргумента –

2

Вы можете написать свою собственную функцию, которая принимает массив ключей в качестве параметра, а затем сделать его в качестве хеш-таблицы для того, чтобы использовать array_intersect_key

function getByKeys($array, $keys) 
{ 
    return array_intersect_key($array, array_flip($keys)); 
} 
Смежные вопросы