只获取键值为正的数组元素


Get only array elements with positive keys

如何在PHP中过滤出具有负整数键的数组元素?

如果我有一个数组:

Array (
    [-3] => Academic degree
    [-4] => Academic discipline
    [-5] => African American history
    [-6] =>
    [1] => Art
)

结果将是:Array ( [1] => Art ) .

我的想法是使用这样的东西:

$arr = array('-1' => 1, '-2' => 2, '3' => 3;'element4' => 4);$filterOutKeys = array('-1', '-2');

$filteredArr = array_diff_key($arr, array_flip($filterOutKeys))

但是当处理更大的数组时,它变得非常不实用。

使用一个简单的foreach?

$filteredArr = array();
foreach($arr as $key => $value)
    if($key > 0)
        $filteredArr[$key] = $value;

使用array_filter()是另一种选择:

$outputArray = array_filter($inputArray, function($value) {
    return ($value < 0) ? false : true;
});
编辑:在看到评论之后,我必须同意,这不是我们想要的。但是你仍然可以使用翻转数组:
$outputArray = array_flip(array_filter(array_flip($inputArray), function($value) {
    return ($value < 0) ? false : true;
}));

我不知道这个解决方案是否比@Dani说的更快。

EDIT2:完整的测试用例:

$inputArray = array(
    -3 => 'Academic degree',
    -4 => 'Academic discipline',
    -5 => 'African American history',
    1 => 'Art');
$outputArray = array_flip(array_filter(array_flip($inputArray), function($value) {
//  return ($value < 0) ? false : true;
    return $value > 0;
}));
var_dump($outputArray);
/* results in:
    array(1) {
      [1]=>
      string(3) "Art"
    }
 */