2010-08-11 41 views
6

我寫了這個函數來獲取數組的子集。 PHP是否有一個內置的功能。我在文檔中找不到一個。如果我重新發明輪子,似乎是一種浪費。基於密鑰數組獲取數組的子集

function array_subset($array, $keys) { 
    $result = array(); 
    foreach($keys as $key){ 
     $result[$key] = $array[$key]; 
    } 
    return $result; 
} 
+0

[PHP數組函數返回給定鍵的子集]的可能副本(https://stackoverflow.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys ) – 2018-03-07 20:27:38

回答

10

array_diff_keyarray_intersect_key可能是你想要什麼。

+1

函數名稱是單數。 http://www.php.net/manual/en/ref.array.php PHP需要清理它們的命名約定! – Keyo 2010-08-11 03:13:16

+1

當您將關鍵字映射到關聯數組中以查找非關聯數組中的值表時,可以在一個參數上使用'array_flip'確保交集/ diff基於兩個鍵或兩個值,而不是一個或另一個的混合。 – danronmoon 2014-02-26 03:38:33

4

我總是也想這樣。像Underscore的pick的PHP版本。

這是醜陋和反直覺的,但我有時做的是(我想這可能是什麼prodigitalson在越來越):

$a = ['foo'=>'bar', 'zam'=>'baz', 'zoo'=>'doo']; 

// Extract foo and zoo but not zam 
print_r(array_intersect_key($a, array_flip(['foo', 'zoo']))); 
/* 
Array 
(
    [foo] => bar 
    [zoo] => doo 
) 
*/ 

array_intersect_key返回第一個參數,它的鍵是所有元素出現在第二個參數(以及所有後續參數,如果有的話)。但是,由於它將按鍵與按鍵進行比較,爲方便起見,我使用array_flip。我也可以剛剛使用['foo' => null, 'zoo' => null],但這更加醜陋。