2010-03-28 6 views
2

J'essaie de savoir s'il existe un moyen plus optimal de créer une liste des propriétés d'un sous-objet d'un objet. (Je m'excuse pour la formulation brute, je ne suis pas vraiment un expert OO)Méthode optimale pour générer une liste de propriétés d'objet PHP avec le caractère délimiteur, implode()?

J'ai un objet "événement" qui a une collection d '"artistes", chaque artiste ayant un "nom d'artiste". Sur ma sortie HTML, je veux une liste simple de noms d'artistes délimités par une virgule.

La commande implode() de PHP semble être le meilleur moyen de créer une liste de valeurs séparées par des virgules. Je suis actuellement en train d'itérer à travers l'objet et de pousser les valeurs dans un tableau temporaire "artistlist" pour que je puisse utiliser implode().

C'est le plus court que j'ai pu trouver. Y a-t-il un moyen de le faire plus élégant?

$artistlist = array(); 
foreach ($event->artists as $artist) 
{ 
    $artistlist[] = $artist->artist_name; 
} 
echo implode(', ', $artistlist); 

Répondre

0

En plus simplement créer la chaîne vous-même et la virgule après annexant chaque artiste (ce qui signifie que vous devez traiter aussi avec la virgule finale appropriée), vous avez la façon la plus concise de le faire déjà.

+0

exactement, la dernière virgule était ce que j'essayais d'éviter – Chris

9

Il n'y a pas vraiment un moyen plus rapide. Avec PHP 5.3, vous pouvez utiliser array_map et un anonymous function:

implode(', ', array_map(function ($artist) { 
     return $artist->artist_name; 
    } , $event->artists)); 

Ce qui est plus élégant, je laisse à vous.

+0

dans <5.3 vous pouvez toujours le faire, mais vous utilisez create_function pour créer la fonction anonyme. – intuited

+0

intéressant, n'a pas pensé à cela. Moi comme. :) – Chris

+0

@intuited: 'create_function' est tellement inélégant. D'habitude, je ne m'en occupe jamais. – outis