Напротив array_filter для хранения определенных значений и сохранения ключей - PullRequest
1 голос
/ 05 августа 2009

У меня есть массив, проиндексированный по ключам, например:

array(
    'key1' => 'value1',
    'key2' => 'value2',
    ...
    'key57' => 'value57'
)

Как «отфильтровать» этот массив, чтобы иметь только, например:

array(
    'key2' => 'value2',
    'key57' => 'value57'
)

и сохранить ключи.

Я знаю функцию array_filter (), но я НЕ хочу ИСКЛЮЧИТЬ все элементы, кроме 2 и 57, нет, я просто хочу СОХРАНИТЬ эти значения.

Существует ли основная функция PHP, которую мы могли бы назвать array_keep () или что-то в этом роде?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 05 августа 2009

Если вы точно знаете, какие клавиши вы хотите сохранить, вы можете легко написать функцию для этого:

<?php 
function array_keep($array, $keys) {
    return array_intersect_key($array, array_fill_keys($keys, null));
}

$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
    'key57' => 'value57'
);

$newArray = array_keep($array, array('key2', 'key57'));

print_r($newArray);

Выход:

Array
(
    [key2] => value2
    [key57] => value57
)
4 голосов
/ 05 августа 2009

Альтернатива функции Тома:

$keptValues = array_intersect_key($array, array_flip(array($key1, $key2)));

Или, с меньшим количеством волшебства, но более многословным:

$keptValues = array_intersect_key($array, array($key1 => null, $key2 => null));
2 голосов
/ 05 августа 2009

Ну, array_filter пропускает элементы, для которых обратный вызов возвращает false. Вы получите желаемый результат, если вы измените проверку / логику в функции обратного вызова, нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...