2009-09-16 2 views
0

J'ai environ 80 instances de cette classe appelée Items et souhaite rechercher efficacement les objets par leur ID ou leur nom.Quel est le meilleur moyen de stocker et de rechercher dans les objets de classe (en PHP)?

<?php 
class Item 
{ 
    public $id; 
    public $name; 

    //methods 
} 
?> 

J'utilise PHP5.

+0

Je pense qu'une simple boucle foreach serait à peu près aussi efficace que vous devriez l'obtenir. Toute autre chose pourrait probablement causer des frais inutiles ou ne vaudrait pas votre temps. Je suppose que vous posez cela dans le contexte d'un problème que vous essayez de résoudre. Les classes avec lesquelles vous travaillez sont-elles extrêmement grandes? – Anthony

+0

ouais une boucle foreach fonctionnerait bien. La classe d'objet est d'environ 70 lignes de code, assez petite. –

Répondre

2

En supposant aucun nom en double ou ID:

$ids = array(); 
$names = array(); 
foreach ($items as $item) { 
    $ids[$item->id] = $item; 
    $names[$item->name] = $item; 
} 

Si vous avez des doublons (de noms, je suppose qu'il n'y a pas de ID en double par définition), vous devez déterminer comment gérer cela. Vous pouvez stocker tous les doublons sous une seule clé (la valeur devient alors un tableau de correspondances). Ou voulez-vous dire une recherche plus sophistiquée? Si c'est le cas, une variante simple pourrait être de diviser le nom de l'élément en mots et/ou phrases, puis de les indexer en conséquence dans un tableau.

+0

est $ items un tableau qui contient des références à des objets? Je voulais une recherche simple et le code que vous avez fourni ferait l'affaire. Merci –

1

Je penserais à créer une classe ItemIndex;

Ceci vous permettrait de maintenir un nombre arbitraire d'index indépendants , surchargeant la comparaison et fonctions de recherche selon le cas.

1

Si vous avez 80 instances, l'option que vous utilisez n'a pas vraiment d'importance. Même si votre recherche est N au carré, je ne pense pas que cela vaille la peine d'investir du temps dans une optimisation des performances ici. Faites la chose la plus simple et ensuite le profil; Si c'est horrible, alors seulement envisager d'augmenter la complexité de l'implémentation pour le rendre plus rapide.

Questions connexes