Le tableau ressemble à:
[0] => stdClass Object
(
[ID] => 420
[name] => Mary
)
[1] => stdClass Object
(
[ID] => 10957
[name] => Blah
)
...
Et j'ai une variable entière appelée $v
.
Comment pourrais-je sélectionner une entrée de tableau qui a un objet où la ID
propriété a la $v
valeur?
isset($item)
mais je préfère initialiser correctement les variablesif($v == $struct["ID"]){...
YurkamTim a raison. Il n'a besoin que d'une modification:
Après la fonction ($), vous avez besoin d'un pointeur vers la variable externe par "use (& $ viewedValue)" et vous pouvez ensuite accéder à la variable externe. Vous pouvez également le modifier.
la source
&
n'est pas requis lors de l'importation$searchedValue
dans l'étendue de fermeture. Le&
est utilisé pour créer une référence qui n'est nécessaire que si elle$searchedValue
a été modifiée à l'intérieur de la fermeture.global
que la seule utilisation était de partager des données dans des fonctions! Mais c'est dommage si c'est vraiment lent. :(la source
J'ai trouvé une solution plus élégante ici . Adapté à la question, il peut ressembler à:
la source
array_filter
renvoie un tableau et ne s'arrête pas à la première valeur trouvée.$searchedValue
à l'intérieur de la fonction. Mais à l'extérieur c'est.$searchedValue
dehors de la portée de fermeture. Deuxièmement, comment pensez-vous que ces méthodes de tableau fonctionnent? Ils font tous une boucle sur le tableau en interne$searchedValue
need writefunction ($e) use ($searchedValue) {
L'utilisation de array_column pour réindexer vous fera gagner du temps si vous devez rechercher plusieurs fois:
Ensuite, vous pouvez simplement
$lookup[$id]
à volonté.la source
L'utiliser comme vous le souhaitez serait quelque chose comme:
la source
Essayer
exemple de travail ici
la source
Correction d'une petite erreur du @YurkaTim , votre solution fonctionne pour moi mais en ajoutant
use
:Pour utiliser
$searchedValue
, à l'intérieur de la fonction, une solution peut êtreuse ($searchedValue)
après les paramètres de la fonctionfunction ($e) HERE
.la
array_filter
fonction ne retourne que$neededObject
si la condition au retour esttrue
Si
$searchedValue
est une chaîne ou un entier:Si
$searchedValue
c'est un tableau où nous devons vérifier avec une liste:la source
var_dump($neededObject);
:)J'aime parfois utiliser la fonction array_reduce () pour effectuer la recherche. C'est similaire à array_filter () mais n'affecte pas le tableau recherché, vous permettant d'effectuer plusieurs recherches sur le même tableau d'objets.
la source
if ($current_item->someProperty == $needle){ $result_array[] = $current_item; }
Je l'ai fait avec une sorte de keymap Java. Si vous faites cela, vous n'avez pas besoin de faire une boucle sur votre tableau d'objets à chaque fois.
production:
la source
Façon d'obtenir instantanément la première valeur:
la source
J'ai publié ce que j'utilise pour résoudre ce problème très efficacement ici en utilisant un algorithme de recherche binaire rapide: https://stackoverflow.com/a/52786742/1678210
Je ne voulais pas copier la même réponse. Quelqu'un d'autre l'avait demandé légèrement différemment mais la réponse est la même.
la source