【问题标题】:Opposite of array_filter to keep certain values and preserving keys与 array_filter 相反,用于保留某些值并保留键
【发布时间】:2009-08-05 12:03:04
【问题描述】:

我有一个数组,由键索引,例如:

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

如何“过滤”该数组,以便仅具有,例如:

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

并保留密钥。

我知道 array_filter() 函数,但我不想排除除 2 和 57 之外的所有项目,不,我只想保留这些值。

是否存在可以命名为 array_keep() 之类的 PHP 核心函数?

谢谢。

【问题讨论】:

  • 对不起,我不明白。为什么不使用 array_filter 返回您想要的值并覆盖您的数组? $array = array_filter($array, 'filterFunction');

标签: php arrays


【解决方案1】:

如果您确切知道要保留哪些键,则可以轻松编写一个函数来做到这一点:

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

【讨论】:

    【解决方案2】:

    汤姆函数的替代方案:

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

    或者,用更少的魔法但更冗长:

    $keptValues = array_intersect_key($array, array($key1 => null, $key2 => null));
    

    【讨论】:

    • 是的,我曾经使用 array_flip,但上周我发现了 array_fill_keys(),我认为这可能会更好
    【解决方案3】:

    好吧,array_filter 忽略了回调返回 false 的元素。如果您在回调函数中反转检查/逻辑,您将得到您想要的结果,不是吗?

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2017-01-13
      • 2021-03-13
      • 1970-01-01
      • 2016-06-16
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多