Titre: Classement de dates
Date: Novembre 2004
Language: PHP
Description: Petit code réalisé suite à une demande sur un forum (phpcs) ; il permet de classer des dates (au format AAAA-MM-JJ) contenues dans un fichier (une date par ligne) de manière croissante et décroissante.
<?php /* ------- Params: ------- $file = url du fichier ( relatif ) $critere = A ou M ou J $order = asc ou desc ------- Retour: ------- 1 ou 0 */ function classer( $file, $critere, $order ) { $fichier = @file( $file ); // si aucune ligne $count = count( $fichier ); if( !$count ) return false; // on enlève les \r\n finaux for( $i = 0; $i < $count; $i++ ) $fichier[ $i ] = rtrim( $fichier[ $i ] ); // paramètre critère $critere = strtolower( $critere ); if( $critere == 'a' ) $GLOBALS['critere'] = 0; else if( $critere == 'm' ) $GLOBALS['critere'] = 1; else if( $critere == 'j' ) $GLOBALS['critere'] = 2; else return 0; $order = strtolower( $order ); if( $order == 'asc' ) $GLOBALS['order'] = -1; else if( $order = 'desc' ) $GLOBALS['order'] = 1; else return false; if( !usort( $fichier, "comparer" ) ) return false; $sortie = implode( "\r\n", $fichier ); $fp = fopen( $file, 'w' ); if( !$fp ) return false; if( !@fputs( $fp, $sortie ) ) return false; @fclose( $fp ); return true; } function comparer( $a, $b ) { $array_a = explode( '-', $a ); $array_b = explode( '-', $b ); if( $array_a[$GLOBALS['critere']] == $array_b[$GLOBALS['critere']] ) return 0; return ( $array_a[$GLOBALS['critere']] > $array_b[$GLOBALS['critere']] ) ? - $GLOBALS['order'] : $GLOBALS['order']; } echo classer( 'fichier.txt', 'j', 'desc' ); ?>
Paramètres:
$file = url du fichier ( relatif )
$critere = A ou M ou J
$order = asc ou desc
Retour: true ou false
Exemple:
<?php echo classer('fichier.txt', 'j', 'desc'); ?>
Télécharger le zip avec un exemple: ici (1 fichier .php, 2 fichiers .txt)
- order_dates.php: contient le code qui classera les dates de fichier.txt
- fichier.txt: contiendra les dates classées après exécution du script
- fichier_init.txt: contient une copie des dates non classées pour une ré-éxécution du script
Laisser un commentaire