> Tous les forums > Forum des Webmasters
 Remplissage d'un arraySujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
didier_b
  Posté le 31/01/2025 @ 16:48 
Aller en bas de la page 
Astucien

Bonjour,

Dans un script PHP, je lis un flux RSS, que je parse avec une fonction de la bibliothèque simplexml, que j'ai installée sur mon serveur.

Ca ça marche bien. Je récupère ensuite les différentes lignes dans une variable $donnee.

La date de publication de chaque ligne se trouve dans le champ (c'est comme ça qu'on dit ?) pubDate.

Le flux n'étant pas toujours fourni trié par date, je récupère cette date pubDate, à laquelle j'ajoute un numéro de série, afin d'avoir un index unique pour chaque ligne du flux; ceci me donne bien une variable que j'ai nommée $index_date; je fais afficher cette variable, et elle est bien conforme à ce que j'ai programmé (ligne provisoire echo "<pre>".$index_date."</pre>").

Ensuite je me sers de cette variable comme clé d'index d'un tableau $articles, afin de stocker par $index_date le contenu du texte souhaité. Le but étant de trier ensuite ce tableau $articles par clé dans le sens inverse (dates plus récentes d'abord), avant de l'afficher. Dans l'affichage, je fais figurer provisoirement la clé, pour contrôle.

Je fais ça dans la ligne : $articles[$index_date]=...

C'est là que ça coince : en guise de clé du tableau, je n'ai qu'un nombre, de '0' jusqu'au nombre de lignes.

Je suppose que je rate untruc gros comme un éléphant, mais je ne vois pas.

Je vous mets le code, et les copies d'écran (affichage de $index_date, puis de l'index du tableau suivi du texte).

Aussi, je suis très preneur de vos suggestions.

Merci par avance.

if($flux = simplexml_load_file($url_rss))
	{
		$articles=array();
   	$donnee = $flux->channel;
		$idx=0;
		foreach($donnee->item as $valeur)
   	{
      //echo '<span style="color:brown; font-style:italic;">'.date("d/m/Y",strtotime($valeur->pubDate)).'</span> - <a target="_blank" href="'.$valeur->link.'">'.$valeur->title.'</a><br />'."\n";
      //echo ''.$valeur->description.'</p>';
			$index_date=date("Y-m-d",strtotime($valeur->pubDate))."-".$idx;
			echo "<pre>".$index_date."</pre>";
			$articles[$index_date]="<span style='color:brown; font-style:italic;'>".date("d/m/Y",strtotime($valeur->pubDate))."</span> - <a target='_blank' href='".$valeur->link."'>".$valeur->title."</a><br />";
			$idx+=1;
   	}
		rsort($articles);
		//echo "<pre>"; print_r($articles); echo "</pre>";
		foreach($articles as $index_date=>$texte)
			echo $index_date."|".$texte;
	}
	else echo 'Erreur de lecture du RSS'."\n";

Publicité
zoulouman
 Posté le 31/01/2025 à 16:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

J'ai pas compris ton problème... Tout me semble correct d'après tes captures.

didier_b
 Posté le 31/01/2025 à 17:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
zoulouman a écrit :

J'ai pas compris ton problème... Tout me semble correct d'après tes captures.

Sur la capture de gauche, j'affiche le contenu de la variable $index_date, qui sert ensuite de clé pour affecter les valeurs au tableau.

Sur la capture de droite, j'affiche la clé et la valeur de chaque ligne du tableau (séparées par un '|'). Et on voit que la clé vaut 0, 1, 2 ... et non 2025-01-31-1, 2025-01-31-2, 2025-01-31-3, ...

Je suppose que la merdouille est dans la ligne ci-dessous, mais je ne la vois pas :

$articles[$index_date]="<span style='color:brown; font-style:italic;'>".date("d/m/Y",strtotime($valeur->pubDate))."</span> - <a target='_blank' href='".$valeur->link."'>".$valeur->title."</a><br />";
didier_b
 Posté le 01/02/2025 à 18:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

J'ai trouvé la merdouille, c'était la ligne rsort($articles), le tri en ordre inverse du tableau.

1. rsort trie sur les valeurs, pas sur les clés.

2. rsort ne conserve pas l'association clé=>valeur, donc toutes mes clés étaient remplacées par un numéro d'ordre entier.

Pour trier sur les clés, il faut une instruction PHP contenant k : ksort.

Pour trier par ordre inverse, il faut une instruction PHP contenant r : rsort.

Et donc le bon combo est krsort : tri sur les clés par ordre inverse.

Tout est là, sous les yeux que qui veut bien voir : https://www.php.net/manual/fr/array.sorting.php

Ouf ! Le problème était bien entre la chaise et le clavier

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Mini PC AOOSTAR GEM12 (Ryzen 9 6900HX, 32 Go RAM, SSD 1 To, Radeon 680M, Oculink, Windows 11 Pro) à 499 €
499 € 575 € -13%
@Geekbuying
SSD WD Black SN770 1 To (PCIe Gen4, NMVe M.2, 5150 Mo/s) à 69,99 €
69,99 € 79 € -11%
@Amazon
Lego Creator Exprert 10298 Vespa 125 à 73,99 €
73,99 € 99,99 € -26%
@Amazon
SSD MSI Spatium M460 1 To (NVMe, PCIe 4.0, 5000 Mo/s) à 57,70 €
57,70 € 82 € -30%
@Amazon
Lessive ARIEL Dash 2en1 70 lavages lavande et camomille à 11,92 €
11,92 € 14,90 € -20%
@Amazon
Lot de 10 récipients en verre avec couvercles Amazon Basics à 34,25 €
34,25 € 41 € -16%
@Amazon

Sujets relatifs
Key "id" for array with keys "0, 1, 2, 3, 4, 5, 6" does not exist.
Pré-remplissage formulaire après clic sur bouton
Remplissage de fiche Excel 'type' via lecture de Base de donnéess
trier sur un champ d'Array
variable et array
trier un array
Extensions de fichiers limitées array()
Afficher array
créer array
travaille avec Array
Plus de sujets relatifs à Remplissage d''un array
 > Tous les forums > Forum Forum des Webmasters