仅获取具有正键的数组元素

时间:2011-08-20 14:47:56

标签: php arrays

如何使用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))

但在处理更大的阵列时,它变得非常不切实际。

2 个答案:

答案 0 :(得分:5)

使用简单的foreach?

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

答案 1 :(得分:0)

使用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"
    }

 */