通过特定测试的KEYS上的PHP数组过滤器

时间:2014-02-04 19:21:32

标签: php arrays filter key

我有一个关联的PHP数组,我想生成一个通过某个测试的键列表。例如

 $myArray = ('28'=>0.01,'51'=>-0.1,'48'=>0.4,'53'=>-0.3);

我想以简单过滤值的方式过滤键。因此,如果我过滤“返回大于0.2的元素”的值将是

 print_r(array_filter($myArray,"biggerThanFilter");

 function biggerThanFilter($v){
       return $v>0.2;
 }

但是如何将过滤器应用于说“keyValueIsBiggerThan50”的键

即这样的事情

print_r(array_KEY_filter($myArray,"keyValueIsBiggerThan50");

function keyValueIsBiggerThan50($key){
         return $key*1>50;
}

4 个答案:

答案 0 :(得分:2)

我会循环遍历array_keys并取消设置,个人:

function array_filter_keys($array, callable $fn)
  foreach (array_keys($array) as $key) {
    if (!$fn($key)) unset($array[$key])
  }
  return $array;
}

$filtered_array = array_filter_keys($array, function($key) { return $key > 50 });

这假设PHP> = 5.4

答案 1 :(得分:1)

function keyValueIsBiggerThan50 ($myArray) {
    $newArray = array();
    foreach($myArray as $key => $value){
        if($key * 1 > 50){
            $newArray[$key] = $value
        }
    }

    return $newArray;
}

一样使用
print_r(keyValueIsBiggerThan50 ($myArray));

您是在寻找这个具体案例还是通用案例?

答案 2 :(得分:0)

对于PHP 5.6+ my answer to a similar question也适用于此:使用ARRAY_FILTER_USE_KEY

<?php
$myArray  = ['28' => 0.01, '51' => -0.1, '48' => 0.4, '53' => -0.3];
$filtered = array_filter(
    $myArray,
    function ($key) {
        return $key > 50;
    },
    ARRAY_FILTER_USE_KEY
);
?>

答案 3 :(得分:0)

对于PHP&lt; 5.6,array_diff_ukey按键执行两个数组的自定义比较,并且似乎进行完整的N x M比较,因此您可以使用虚拟对象作为第二个数组来过滤单个数组。

使用PHP 5.5.9,我使用以下方法从数组中删除数字键元素:

 $res = array_diff_ukey($res, array(0), function ($a,$b){ return is_string($a); });