2010-08-11 4 views
6

J'ai écrit cette fonction pour obtenir un sous-ensemble d'un tableau. Php a-t-il une fonction intégrée pour cela? Je ne peux pas en trouver un dans les docs. On dirait un gaspillage si je réinvente la roue.Récupère un sous-ensemble d'un tableau basé sur un tableau de clés

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

Copie possible de [fonction de tableau PHP qui renvoie un sous-ensemble pour des clés données] (https://stackoverflow.com/questions/12543361/php-array-function-that-returns-a-subset-for-given-keys –

Répondre

10

array_diff_key et array_intersect_key sont probablement ce que vous voulez.

+1

Les noms de fonctions sont au singulier. http://www.php.net/manual/en/ref.array.php PHP doit nettoyer ses conventions de nommage! – Keyo

+1

Lorsque vous mappez des clés dans un tableau associatif pour rechercher une table de valeurs dans un tableau non associatif, vous pouvez utiliser 'array_flip' sur un argument pour vous assurer que l'intersection/diff est basée sur les deux clés ou les deux valeurs, un mélange de l'un ou de l'autre. – danronmoon

4

Je le veux toujours aussi. Comme une version PHP de pick de Underscore.

Il est laid et contre-intuitif, mais ce que je fais parfois est-ce (je pense que cela peut être ce que prodigitalson commençait à):

$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 retourne tous les éléments du premier argument dont les clés sont présent dans le 2ème argument (et tous les arguments suivants, le cas échéant). Mais, puisqu'il compare les clés aux clés, j'utilise array_flip pour plus de commodité. Je pourrais aussi avoir utilisé ['foo' => null, 'zoo' => null] mais c'est encore plus laid.

Questions connexes