combiner plusieurs conditions dans un foreach

Petit nouveau ! | 2 Messages

13 juil. 2011, 18:43

Bonjour à tous,

Je parse en php simplexml un fichier xml dont voici un extrait.

Code : Tout sélectionner

<programme start="20110713163000 +0200" stop="20110713165500 +0200" channel="CLU1.kazer.org"> <title>Les sorciers de Waverly Place</title> <sub-title>Magie Tech en péril</sub-title> <desc>Après s'être inscrite à Magie Tech, Alex se rend compte que son nouveau béguin, Ronald, a kidnappé Dean. Elle s'allie à Justin pour essayer d'empêcher que Magie Tech ne tombe entre les mains de Ronald et de son père maléfique... </desc> <credits><actor role="Max Russo">Jake T Austin</actor><actor role="Alex Russo">Selena Gomez</actor><actor role="Justin Russo">David Henrie</actor><actor role="Harper">Jennifer Stone</actor><actor role="Theresa Russo">Maria Canals</actor><actor role="Jerry Russo">David DeLuise</actor><actor role="Dean">Daniel Samonas</actor><actor role="Ronald">Chad Duell</actor> </credits> <date>2008</date> <category lang="fr">Série</category> <length units="minutes">25</length> <episode-num system="xmltv_ns">1.6/30.</episode-num> <video><aspect>4:3</aspect></video> </programme>
Je cherche à créer une boucle qui m'afficherait par exemple tous les programmes dont l'attribut start commence par xxxxx et dont l'attribut channel est égal à PLU2.kazer.org.

J'ai essayé avec un foreach en utilisant pour combiner les conditions la barre verticale |

Le problème est qu'au lieu d'afficher les programmes dont la date commence par xxxx ET dont la chaine est yyyy, cela m'affiche d'une part tous les prog dont la date commence par xxxx ET d'autre part dont la chaine est yyy

Voici mon code php avec le foreach

Code : Tout sélectionner

$xml = 'monfichier.xml'; $flux = simplexml_load_file($xml); foreach($flux->xpath("//programme[starts-with(@start, '2011071320')] | //programme[@channel='PLU2.kazer.org" ) as $programme){ echo $programme->title.' / '; echo $programme->sub-title.' / '; echo $programme["start"].' / '; echo $programme["stop"].' / '; echo $programme["channel"].' / '; echo $programme->desc.'<br />'; }

Quelqu'un sait il comment combiner ces 2 conditions comme je le souhaites?

Merci d'avance!

Petit nouveau ! | 2 Messages

13 juil. 2011, 18:55

Je complète ma question car in fine ma boucle doit être plus complexe.

Je cherche à mettre en echo après mon foreach le nom de la channel (et non pas son id)
Le nom est contenu dans le fichier xml sous un tag de même niveau que le tag programme.

Exemple :

Code : Tout sélectionner

<channel id="PLU2.kazer.org"> <display-name>Plug RTL</display-name> </channel> <programme start="20110713154500 +0200" stop="20110713165000 +0200" channel="PLU2.kazer.org"> <title>Allo tarot</title> <length units="minutes">65</length> </programme>
je dois donc faire une jointure entre <channel> et <programme> WHERE channel='PLU2.kazer.org'

Problème c'est que je ne sais pas non plus comment...

Eléphant du PHP | 74 Messages

16 juil. 2011, 13:24

Bonjour,

Après une petite recherche voici ce que j'ai trouvé :
record[field[@id='220' and @value='Red'] and field[@id='221' and @value='Large']] 
Je pense que ça doit correspondre à ce que tu souhaites obtenir...à toi d'adapter