2011-08-20 16 views
3

如何用PHP中的負整數鍵過濾掉數組元素?只獲得帶有正數鍵的數組元素

所以,如果我有一個數組:

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

的結果將是:Array ([1] => Art)

我的想法是使用這樣的:

$ ARR =陣列( '-1'=> 1, '-2'=> 2, '3'=> 3, 「元素4 '=> 4); $ filterOutKeys = array('-1','-2');

$ filteredArr = array_diff_key($改編,array_flip($ filterOutKeys))

但更大的陣列處理,當它翻起來非常不切實際的。

回答

5

使用一個簡單的foreach?

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

+1或者比我打算寫答案更好。 –

+0

這與字符串鍵「'-3g0-」'是如何工作的? – hakre

+1

「字符串鍵」不是整數!?但是你可以用['intval('-3g0-');'](http://php.net/manual/en/function.intval.php)把它們變成整數。 – feeela

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

*/ 
+0

-1!正數鍵,而不是正數 – RiaD

+1

編號此功能使用的是數值,而不是鍵。 –

+1

您可以將閉包中的返回值更改爲'return $ value> 0;'因爲那樣只返回一個布爾值 – adlawson