我有一个关联的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;
}
答案 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); });