Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 19h36   #1
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Par défaut Tri sur la date ?

Bonsoir,

Je sais qu'il s'agit encore d'une question sur le tri d'un tableau selon un colonne en particulier mais je m'y perds un peu...

J'ai le code suivant : d'abord je lis 2 flux rss que je mets bout à bout dans un tableau. Et ensuite j'affiche le tableau
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
$i = 0;
$xml = simplexml_load_file('flux1.xml') ;
foreach($xml->channel->item as $item) 
{
$tableau[$i][1] = utf8_decode($item->title);
$tableau[$i][0] = utf8_decode($item->pubDate);
$tableau[$i][2] = utf8_decode($item->description);
$tableau[$i][3] = "source n°1";
$tableau[$i][4] = utf8_decode($item->link);
$i++;
}
 
$xml = simplexml_load_file('flux2.xml') ;
foreach($xml->channel->item as $item)
{
$tableau[$i][1] = utf8_decode($item->title);
$tableau[$i][0] = utf8_decode($item->pubDate);
$tableau[$i][2] = utf8_decode($item->description);
$tableau[$i][4] = utf8_decode($item->link);
$tableau[$i][3] = "source n°2";
$i++;
 
}
 
/* affichage du tableau */
 
for($k=0;$k<$i;$k++)
	{
	echo "<h3><a href='".$tableau[$k][4]."'>".$tableau[$k][1]."</a></h3>";
	$daterss = utf8_decode($tableau[$k][0]);
	echo '<p>Le '.date("d F Y",strtotime($daterss)).', '; 
	echo "par ".$tableau[$k][3]."</p>";
	echo "<p>".$tableau[$k][2]."</p>";
	echo "<p class='description'></p>";
	}
OK... le code n'est pas génial mais il a le mérite de marcher.
Cependant, il affiche les infos du flux 1 puis les infos du flux 2, logique : c'est l'ordre du tableau.

J'aimerai savoir comment je peux m'y prendre pour faire le tri par date, et ainsi afficher les éléments des flux par ordre chronologique.

Merci et à bientôt,
En espérant que mon explication ait été claire.

A bientôt,
Alexis
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 20h20   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Avec array_multisort() (exemple #2 http://php.net/manual/fr/function.array-multisort.php)

au passage, plus simplement :
Code :
1
2
3
4
5
6
7
8
9
10
foreach($xml->channel->item as $item) 
{
$tableau[] = array(
                utf8_decode($item->pubDate),
                utf8_decode($item->title),
                utf8_decode($item->description),
                "source n°1",
                utf8_decode($item->link)
             );
}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 20h48   #3
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Merci pour cette indication mais c'est pas là que j'avais commencé.

Si j'ai posté ici, c'est que je n'ai pas compris comment mettre array_multisort en application. Comment puis-je faire comprendre au script que je veux faire le tri sur la "colonne0" ?
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 20h51   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je t'ai indiqué le mauvais exemple.
C'est le #3 qui te concerne.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 21h43   #5
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
J'ai ajouté ça :

Code :
1
2
3
4
5
6
7
8
9
foreach ($tableau as $key => $row) {
    $col0[$key] = $row['0'];
    $col1[$key] = $row['1'];
	$col2[$key] = $row['2'];
	$col3[$key] = $row['3'];
	$col4[$key] = $row['4'];
}
 
array_multisort($col0, SORT_DESC, $tableau);
Le tableau ne s'affiche plus dans le même ordre mais je ne vois pas du tout quel tri a été fait
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 22h04   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
$row[0] et non $row['0']
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 10h41   #7
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Bonjour,

effet... erreur impardonnable...

Plus sérieusement, j'ai essayé de faire me tri selon les autres colonnes et ça marche. Cependant ça ne marche toujours pas pour la "col0" qui contient la date.
Cette nuit, j'ai eu une petite idée, j'ai remplacé les lignes 31 et 32 de mon code :

Code :
1
2
$daterss = utf8_decode($tableau[$k][0]);
echo '<p>Le '.date("d F Y",strtotime($daterss)).', ';
Par celle-ci :

Code :
echo '<p>Le '.utf8_decode($tableau[$k][0]).', ';
Et j'ai essayé de trier selon la date (la col0 donc...)

La bonne nouvelle c'est qu'un tri se fait : d'abord les Wed (mercredi), puis les Tue (mardi), puis les Thu (jeudi), puis les Sun (dimanche), puis les Mon (lundi) et enfin les Fri (vendredi).
Je pense qu'il me faut trouver un bon formatage de la date dans la colonne 0 de mon tableau pour avoir un tri chronologique selon la date.

Je vous tiens au courant.

A bientôt et bonne journée,
Alexis
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 11h54   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Si tu as des dates Y-m-d, elles se trieront correctement.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 14h53   #9
Membre habitué
 
Homme Alexis Amand
pitête développeur....
Inscription : octobre 2007
Messages : 140
Détails du profil
Informations personnelles :
Nom : Homme Alexis Amand
Âge : 32
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : pitête développeur....

Informations forums :
Inscription : octobre 2007
Messages : 140
Points : 116
Points : 116
Envoyer un message via MSN à tabouet Envoyer un message via Yahoo à tabouet
Juste avant de lire ta réponse, j'avais trouvé une solution qui fonctionne :
J'ai ajouté une "nouvelle colonne" au tableau. Celle ci contient le timestramp unix. Je peux ainsi faire un classement croissant ou décroissant.

Par contre, je dois avouer que la solution que tu proposes me parait un peu plus correcte d'un point de vue du développement et de l'optimisation du code. Je la testerai dés que possible.
__________________
J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

Je vous emmène en voyage sur la Route 66
ou sur mon mon site pro (qui est en pleine restructuration car il est toupouri)
tabouet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h43.


 
 
 
 
Partenaires

Hébergement Web