214 votes

Comment trouver une entrée par propriété d'objet à partir d'un tableau d'objets ?

Le tableau ressemble à ça :

[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ù l'option ID a la propriété $v valeur ?

1voto

Mart-Jan Points 45

J'ai fait ça avec une sorte de keymap Java. Si vous faites cela, vous n'avez pas besoin de boucler sur votre tableau d'objets à chaque fois.

<?php

//This is your array with objects
$object1 = (object) array('id'=>123,'name'=>'Henk','age'=>65);
$object2 = (object) array('id'=>273,'name'=>'Koos','age'=>25);
$object3 = (object) array('id'=>685,'name'=>'Bram','age'=>75);
$firstArray = Array($object1,$object2);
var_dump($firstArray);

//create a new array
$secondArray = Array();
//loop over all objects
foreach($firstArray as $value){
    //fill second        key          value
    $secondArray[$value->id] = $value->name;
}

var_dump($secondArray);

echo $secondArray['123'];

sortie :

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'id' => int 123
      public 'name' => string 'Henk' (length=4)
      public 'age' => int 65
  1 => 
    object(stdClass)[2]
      public 'id' => int 273
      public 'name' => string 'Koos' (length=4)
      public 'age' => int 25
array (size=2)
  123 => string 'Henk' (length=4)
  273 => string 'Koos' (length=4)
Henk

1voto

Chad E. Points 1046

J'ai résolu ce problème en utilisant l'ID comme clé dans le tableau. C'est plus simple et peut-être plus rapide pour ce scénario où l'ID est ce que vous recherchez.

[420] => stdClass Object
        (
            [name] => Mary
         )

[10957] => stdClass Object
        (
            [name] => Blah
         )
...

Maintenant je peux m'adresser directement au tableau :

$array[$v]->name = ...

Ou, si je veux vérifier l'existence d'une identité :

if (array_key_exists($v, $array)) { ...

0voto

Justin Jack Points 443

J'ai publié ici ce que j'utilise pour résoudre efficacement ce problème 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 avait posé la question de manière légèrement différente, mais la réponse est la même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X