Tableau PHP réduire à la sous-clé du tableau
J'ai un tableau comme ceci
$users = array(
[0] => array('Id' => 3, 'Name' => 'Bob'),
[1] => array('Id' => 8, 'Name' => 'Alice'),
)
et je veux tirer le Id 'jusqu'à' un niveau de sorte que le tableau final est:
$usersById = array(
[3] => array('Id' => 3, 'Name' => 'Bob'),
[8] => array('Id' => 8, 'Name' => 'Alice'),
)
Les valeurs d'Id sont uniques.
Est-il un natif de PHP façon de le faire? Le code que j'utilise actuellement est:
$usersById = array();
foreach ($users as $key => $value)
{
$usersById[$value['Id']] = $value;
}
Cela fonctionne, mais n'est pas très élégant. Merci!
Vous devez vous connecter pour publier un commentaire.
Réponse moderne (nécessite PHP 5.5)
La nouvelle fonction
array_column
est très polyvalent et l'une des choses qu'il peut faire, c'est exactement ce type de réindexation:Réponse originale à cette question (pour d'anciennes versions de PHP)
Vous avez besoin de récupérer l'id de la sous-ensembles avec
array_map
, puis créer un nouveau tableau avecarray_combine
:Le code ci-dessus nécessite PHP >= 5.3 pour les anonymes syntaxe de la fonction, mais vous pouvez également faire la même chose (même si elle sera un peu plus laid) avec
create_function
qui ne nécessite que PHP >= 4.0.1:Le voir en action.
Vous pouvez utiliser le
array_reduce()
fonction, comme:Cependant, il n'est plus élégant qu'un
foreach
.foreach
." - sauf que c'est du déclaratif, l'origine$users
tableau n'est pas muté, et vous pouvez dynamiquement passer à travers un rappel àarray_reduce
🙂Je pense que l'utilisation
foreach
est beaucoup plus élégant. Peut-être vous ne voulez écrire différemment:Dans le cas où vous souhaitez remplacer le tableau existant,
foreach
n'est pas souples, en effet. Mais peut-être que ce qui suit est une sorte d'alternative:Il permet le rappel pour accepter les paramètres, par exemple le nom de la clé qui doit être utilisé pour créer les nouvelles clés de.
usersKeyedBy
serait un meilleur nom.Et une variante de plus, à l'aide de array_walk: