[RESOLU] Fonction avec tableau de données triées par date

Eléphanteau du PHP | 48 Messages

15 déc. 2015, 16:30

Salut,

Je fais suite à mon problème sur ce topic : php-avance/choisir-derniere-date-sql-t275072.html

J'ai réussi plus ou moins ce que je voulais faire mais je suis de nouveau bloqué pour le faire APRÈS une requête et donc en PHP.

Dans $liste, j'ai un Array avec :

1, bonjour, 2015-12-14
2, coucou, 2015-12-14
3, bonjour, 2015-12-12
4, bonjour, 2015-12-10
5, super, 2015-12-12

Mais, je souhaite, via une fonction, faire ceci :

trierParDate($liste, '2015-12-14'); // me donne un array avec "1, bonjour, 2015-12-14" et "2, coucou, 2015-12-14".
trierParDate($liste, '2015-12-12'); // me donne un array avec "3, bonjour, 2015-12-12" et "5, super, 2015-12-12".
trierParDate($liste, '0'); // me donne un array avec les derniers de chaque date "1, bonjour, 2015-12-14", "2, coucou, 2015-12-14" et "5, super, 2015-12-12".

Vous comprenez ma demande ?

Merci

ynx
Mammouth du PHP | 586 Messages

15 déc. 2015, 17:14

Salut,

Une solution possible en supposant que ton tableau initial $liste soit déjà trié :
$liste = array(
		array(1, 'bonjour', '2015-12-14'),
		array(2, 'coucou', '2015-12-14'),
		array(3, 'bonjour', '2015-12-12'),
		array(4, 'bonjour', '2015-12-10'),
		array(5, 'super', '2015-12-12')
	);
	
function trierParDate($liste, $date) {
	$listeTriee = array();
	
	foreach($liste as $element) {
		if ($date == '0') {
			$listeTriee[$element[2]] = $element;
		} else if ($element[2] == $date) {
			$listeTriee[] = $element;
		}
	}
	
	return array_values($listeTriee);
}

// test :
echo '<pre>';

$listeTriee1 = trierParDate($liste, '2015-12-14');
var_dump($listeTriee1);

$listeTriee2 = trierParDate($liste, '2015-12-12');
var_dump($listeTriee2);

$listeTriee3 = trierParDate($liste, '0');
var_dump($listeTriee3);

echo '</pre>';
Le principe est assez simple : si le paramètre $date est égal à '0', on ajoute dans un nouveau tableau tous les éléments du tableau initial en utilisant la date de chaque élément comme clé du second tableau. En utilisant la date comme clé du second tableau, tous les éléments ayant la même date vont donc s'écraser et au final seul le dernier élément de chaque date sera conservé dans le second tableau (en supposant que le tableau initial est déjà trié dans l'ordre souhaité). Si le paramètre n'est pas égal à 0, on ajoute les éléments dans le second tableau en comparant simplement la date.

Bonne journée

Eléphanteau du PHP | 48 Messages

15 déc. 2015, 17:23

Magnifique !

Merci, c'est exactement ce qu'il me faut.

=D>