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