J'ai un tableau où je veux rechercher uid
et obtenir la clé du tableau.
Exemples
Supposons que nous ayons le tableau bidimensionnel suivant:
$userdb = array(
array(
'uid' => '100',
'name' => 'Sandra Shush',
'pic_square' => 'urlof100'
),
array(
'uid' => '5465',
'name' => 'Stefanie Mcmohn',
'pic_square' => 'urlof100'
),
array(
'uid' => '40489',
'name' => 'Michael',
'pic_square' => 'urlof40489'
)
);
L'appel de fonction search_by_uid(100)
(uid du premier utilisateur) doit retourner0
.
L'appel de fonction search_by_uid(40489)
doit retourner2
.
J'ai essayé de faire des boucles, mais je veux un code d'exécution plus rapide.
php
arrays
multidimensional-array
Rachit
la source
la source
array_column
réponses unilatérales. Je les ai tous modifiés pour renvoyer le tableau découvert, pas seulement la clé, car c'est généralement mon cas d'utilisation. La méthode de fonction a obtenu 0,361, le micro-retard moyen de recherche-col 0,184 et le col-clés 0,189 sur 1000 exécutions pour chaque méthode.Réponses:
Cela fonctionnera. Vous devriez l'appeler comme ceci:
Il est important de savoir que si vous utilisez des
===
types d'opérateurs comparés doivent être exactement les mêmes, dans cet exemple, vous devez rechercherstring
ou simplement utiliser à la==
place===
.Basé sur la réponse angoru . Dans les versions ultérieures de PHP (
>= 5.5.0
), vous pouvez utiliser une ligne.Voici la documentation: http://php.net/manual/en/function.array-column.php .
la source
array_column($userdb, 'uid')
pararray_map(function($v){return $v['uid'];},$userdb)
array_search
, non?foreach
boucle) fonctionnera plus rapidement car elle s'arrête dès qu'une correspondance est trouvée. La nouvelle solution doit parcourir une fois l'ensemble du tableau pour extrairearray_column
, puis la parcourir une deuxième fois pour effectuer la recherche (jusqu'à ce qu'elle trouve une correspondance). La nouvelle solution est plus facile à lire, plus concise, mais l'OP a spécifiquementSi vous utilisez (PHP 5> = 5.5.0), vous n'avez pas à écrire votre propre fonction pour ce faire, écrivez simplement cette ligne et c'est fait.
Si vous voulez un seul résultat:
Pour plusieurs résultats
Dans le cas où vous avez un tableau associatif comme indiqué dans les commentaires, vous pouvez le faire avec:
Si vous utilisez PHP <5.5.0, vous pouvez utiliser ce backport , merci ramsey!
Mise à jour: j'ai fait quelques benchmarks simples et le formulaire de résultats multiples semble être le plus rapide, encore plus rapide que la fonction personnalisée Jakub!
la source
array_search(40489, array_combine(array_keys($userdb), array_column($userdb, 'uid')))
Dans les versions ultérieures de PHP (> = 5.5.0), vous pouvez utiliser ce one-liner:
la source
En s'appuyant sur l' excellente réponse de Jakub , voici une recherche plus généralisée qui permettra de spécifier la clé (pas seulement pour uid):
Usage:
$results = searcharray('searchvalue', searchkey, $array);
la source
Je sais que cela a déjà été répondu, mais je l'ai utilisé et je l'ai étendu un peu plus dans mon code afin que vous n'ayez pas à rechercher uniquement par l'uid. Je veux juste le partager pour toute autre personne qui pourrait avoir besoin de cette fonctionnalité.
Voici mon exemple et veuillez garder à l'esprit que c'est ma première réponse. J'ai retiré le tableau de paramètres parce que je n'avais besoin que de rechercher un tableau spécifique, mais vous pouvez facilement l'ajouter. Je voulais essentiellement rechercher plus que juste l'uid.
De plus, dans ma situation, il peut y avoir plusieurs clés à retourner à la suite d'une recherche par d'autres champs qui peuvent ne pas être uniques.
Plus tard, j'ai fini par écrire ceci pour me permettre de rechercher une autre valeur et clé associative. Mon premier exemple vous permet donc de rechercher une valeur dans n'importe quelle clé associative spécifique et de renvoyer toutes les correspondances.
Ce deuxième exemple vous montre où une valeur ('Taylor') se trouve dans une certaine clé associative (prénom) ET une autre valeur (true) se trouve dans une autre clé associative (employée), et renvoie toutes les correspondances (Clés où les personnes avec un prénom 'Taylor' ET sont employés).
Utilisation de la fonction
Résultat
la source
Looks array_filter sera une solution appropriée pour cela ...
Code PHP
la source
syntax error, unexpected '=>' (T_DOUBLE_ARROW), expecting ';'
J'ai modifié l'un des exemples ci-dessous description fonction array_search . La fonction
searchItemsByKey
renvoie toutes les valeurs par clé $ à partir du tableau multidimensionnel (N niveaux). Peut-être que ce serait utile pour quelqu'un. Exemple:Code de fonction:
la source
Voici une doublure pour le même,
la source
Même si c'est une vieille question et a une réponse acceptée, j'ai pensé suggérer un changement à la réponse acceptée. Donc tout d'abord, je suis d'accord que la réponse acceptée est correcte ici.
Remplacer le 'uid' prédéfini par un paramètre dans la fonction à la place, donc maintenant appeler le code ci-dessous signifie que vous pouvez utiliser la fonction unique sur plusieurs types de tableaux. Petit changement, mais qui fait la légère différence.
Exemple de PHP Fiddle
la source
null
puis dans le code, vous le comparez àfalse
.Je veux vérifier que dans le tableau suivant
$arr
existe-t-il ou non 'abc' dans les sous-tableauxEnsuite, je peux utiliser cela
Je pense que c'est la façon la plus simple de définir
la source
J'ai dû utiliser une fonction qui trouve tous les éléments d'un tableau. J'ai donc modifié la fonction effectuée par Jakub Truneček comme suit:
la source
la source
vous pouvez utiliser cette fonction; https://github.com/serhatozles/ArrayAdvancedSearch
la source
la source
Essaye ça
la source
Il suffit de partager, peut-être peut-être comme ça.
la source
Essayez aussi
la source
Avec l'aide du code ci-dessus, on peut trouver toutes les données (partiellement appariées) de n'importe quelle colonne du tableau 2D afin que l'ID utilisateur puisse être trouvé comme requis en question.
la source
En développant la fonction créée par @mayhem, cet exemple serait davantage une recherche "floue" au cas où vous voudriez simplement faire correspondre une partie (la plupart ) d'une chaîne de recherche:
Par exemple, la valeur dans le tableau est Bienvenue à New York! et vous vouliez la première instance de "New York!"
la source
la source
Si question ie
Rép:
la source
ma solution:
la source