2010-08-06 5 views
3

$var est un tableau:objets arbre appeler PHP

Array (
    [0] => stdClass Object ([ID] => 113 [title] => text) 
    [1] => stdClass Object ([ID] => 114 [title] => text text text) 
    [2] => stdClass Object ([ID] => 115 [title] => text text) 
    [3] => stdClass Object ([ID] => 116 [title] => text) 
) 

Comment peut-on appeler [title] de certains [ID]? (Sans toucher [0], [1], [2], [3])

Comme, si nous appelons $var['114']['title] il devrait donner text text text

Répondre

3

Pourquoi ne structure pas vous, il aime:

Array (
    [113] => stdClass Object ([title] => text) 
    [114] => stdClass Object ([title] => text text text) 
    [115] => stdClass Object ([title] => text text) 
    [116] => stdClass Object ([title] => text) 
) 

Problème résolu.


Dites que vos enregistrements sont dans $records. Vous pouvez le convertir en faire:

$newArray = array(); 
foreach ($records as $record) { 
    $id = $record->id; 
    unset($record->id); 
    $newArray[$id] = $record; 
} 

print_r($newArray); 
+0

CMS crée ce tableau. La question est mise à jour. – James

+0

@Ignatz Et dit CMS ne fournit pas un meilleur moyen d'accéder aux données? – NullUserException

+0

La réponse @Ignatz a été mise à jour – NullUserException

6

Vous ne pouvez pas.

Vous pouvez créer un nouveau tableau avec l'ID comme clé, et ensuite vous pouvez accéder rapidement au titre, ou vous pouvez parcourir le tableau à chaque fois que vous avez besoin de rechercher un ID.

+0

en boucle à chaque fois ne semble pas une bonne idée pour performace. – James

+0

@Igatz ouais, mais ce n'est pas la faute de Sjoerd. Il dit juste comme ça. Vous ne pouvez pas omettre l'index du tableau pour accéder aux propriétés de stdObject sans aucun code supplémentaire. – Gordon

+0

Je ne sais pas quelle est la taille de votre ensemble de données, mais il est généralement préférable de s'inquiéter des performances lorsque vous avez vraiment un problème. Si vous recherchez linéairement 50 éléments dans un tableau contenant 100 éléments, cela prend de l'ordre de 1 milliseconde. Est-ce que votre utilisateur va le remarquer? Commencez par résoudre le problème, puis trouvez les points chauds et optimisez-les. – Sjoerd

1

Si je comprends bien, alors voici mon exemple:

<?php 
// This is your first Array 
$var = array(); 

// And here some stdClass Objects in this Array 
$var[] = (object) array('ID' => 113, 'title' => 'text'); 
$var[] = (object) array('ID' => 114, 'title' => 'text text text'); 
$var[] = (object) array('ID' => 115, 'title' => 'text text'); 
$var[] = (object) array('ID' => 116, 'title' => 'text'); 

// Now here the new Array 
$new_var = array(); 
foreach($var as $k => $v) 
{ 
    $new_var[$v->ID] = (array) $v; 
} 

// Now you can use $new_var['113']['title'] and so on 
echo $new_var['113']['title']; 
?> 
+0

Que faire si les enregistrements ont plus de propriétés (ie: ''title' => 'something', 'date' => 2009-02-30)'? – NullUserException

+0

merci l'homme, l'air bien – James