Tri des tableaux avec foreach?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tri des tableaux avec foreach?

par Hubert Roksor » 22 déc. 2006, 15:43

je dépends des fichiers xml se trouvants sur des sites externes.
Ben tu remplaces le chemin local par l'URL en question, ça devrait marcher de la même façon.

Pour ta dernière question, je ne sais pas, en revanche je crois savoir que tu peux remplacer ton code actuel par
$library = simplexml_load_file('fichier.xml');

foreach ($library->channel->item as $item)
{
	$data[] = array(
		'title'   => $item->title,
		'pubDate' => strtotime($item->pubDate)
	);
}
C'est la magie de SimpleXML. Quant aux parenthèses supplémentaires, elles sont inutiles.

par didjiridou » 22 déc. 2006, 15:37

J'en profite pour poser une autre petite question.

Avec le code suivant :
$library = simplexml_load_file('fichier.xml');
  foreach ($library->channel as $shelf) {
      foreach ($shelf->item as $item) {
		$data[] = array('title' => ($item->title), 'pubDate' => strtotime(($item->pubDate)));
      }
  }
Comment puis je ne garder que les 5 premières news?

Merci :)

par didjiridou » 22 déc. 2006, 15:35

Cela aurait pu etre interessant, mais malheureusement je dépends des fichiers xml se trouvants sur des sites externes.

Mais merci pour l'information.

Max

par Hubert Roksor » 22 déc. 2006, 14:55

Pour info, je me suis demandé en lisant ce topic si cela aurait été plus facile ou plus clair en utilisant XSLT. Une petite dizaine de minutes plus tard voici le résultat : (ça comprend le temps de télécharger un fichier RSS sur le web et apprendre chez le w3c comment se servir de <xsl:sort />)

rss.xsl:

Code : Tout sélectionner

<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="iso-8859-1" /> <xsl:template match="/"> <ul><xsl:for-each select="rss/channel/item"> <xsl:sort select="pubDate" order="descending" /> <xsl:if test="position() < 5"> <li><xsl:value-of select="title" /> (<xsl:value-of select="pubDate" />)</li> </xsl:if> </xsl:for-each></ul> </xsl:template> </xsl:stylesheet>
rss.php:
<?php

$xsl = new DOMDocument;
$xsl->load('rss.xsl');

$xml = new DOMDocument;
$xml->load('rss.xml');

$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);

echo $proc->transformToXML($xml);
Si vous ne connaissez pas XSLT ça ne vous dira peut-être pas grand-chose, mais l'expérience s'est révelée étonamment simple. (la logique commence au premier <ul> le reste c'est le gabarit de base des fichiers XSLT)

par didjiridou » 22 déc. 2006, 14:16

Merci pour ta réponse si rapide.

J'ai finalement opté pour ceci :
<?
include ('test.php5');
foreach ($data as $key => $row) {
   $title[$key]  = $row['title'];
   $pubDate[$key] = $row['pubDate'];
}

array_multisort($pubDate, SORT_DESC, $title, SORT_ASC, $data);

for ($i = 0; $i < count($pubDate); $i++){
	echo "<ul><li>".$title[$i]."</li></ul>";
	echo "Date : ".$pubDate[$i]."<br />";
}
?>
Cela fonctionne parfaitement :)

par ouckileou » 22 déc. 2006, 12:09

Il y a des tas de fonctions de tri sur les tableaux, voici la plus simple : sort()

Les autres sont liées.

Tri des tableaux avec foreach?

par didjiridou » 22 déc. 2006, 11:43

Bonjour a tous,

Je souhaiterais trier un tableau en fonction d'un champ date. Voici le code en php pour la création du tableau :
$library = simplexml_load_file('rss_mix.php5');
  foreach ($library->channel as $shelf) {
      foreach ($shelf->item as $item) {
          printf("<br />%s\n", $item->title);
          printf("<br />%s\n", $item->pubDate);
      }
  }
Est-il possible d'afficher par exemple les 5 dernières news par date?

Merci d'avance.

MAx