[PHP] [Dates & Fichiers] Classement de dates

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

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *