Page 1 sur 1

Tri d'un tableau bidimensionnel sur un champ date

Posté : 02 oct. 2008, 23:40
par gobi13
Salut tout le monde,

Je ne peux pas utiliser le tri de SQL car je construit mon tableau a partir de différentes requêtes et tri.

Mon tableau est construit de la sorte : $eventTab[]= array('date'=> $theEvent['date'], 'value' => $theEvent);

Je veux ensuite trier le tableau par dates croissantes sans perdre l'ordre des associations date -> event bien sur et en gardant les doublons de dates...

J'essaye avec la fonction :
function record_sort($records, $field, $reverse)
{
    $hash = array();												   
    foreach($records as $record){  	
        $hash[$record[$field]] = $record;
    }												   
    ($reverse)? krsort($hash,SORT_REGULAR) : ksort($hash,SORT_REGULAR);													   	
    $records = array();												   
    foreach($hash as $record){	    	
        $records[] = $record;
    }												   
    return $records;
}
Mais je n'ai plus que 22 resultats au lieu de 58 alors je pense que ca vire les doublons :cry:

J'ai déjà cherché un bon moment, testé array_multisort mais sans succès, votre aide est précieuse!
Merci

Posté : 02 oct. 2008, 23:50
par lux
Je sais pas si ça peut aider, mais avec natsort() peut-être. Ça m'a déjà sorti de ce genre de galère.

(Mais pas sur que ça marche pour ton cas, à voir)

Posté : 03 oct. 2008, 00:13
par gobi13
Bon j'ai trouvé, j'ai modifié ma fonction de la sorte :
function record_sort($records, $field, $reverse)
{
//			echo 'record sort<br>';
    $hash = array();												   
    foreach($records as $record){
    	
        $hash[$record[$field]][] = $record;
    }												   

    ($reverse)? krsort($hash,SORT_REGULAR) : ksort($hash,SORT_REGULAR);	    							   	
    $records = array();												   
    
    foreach($hash as $record){
    	foreach($record as $evt){	    	
        	$records[] = $evt;
    	}
    }												   
    return $records;
}
Ainsi je conserve autant d enregistrements qu'au départ même si j'ai plusieurs fois les meme dates.

Posté : 03 oct. 2008, 00:27
par AB
Ah bah c'est auto résolu alors ?

Posté : 03 oct. 2008, 00:34
par gobi13
Ah bah c'est auto résolu alors ?
Oui merci ! :lol:

Je change le sujet pardon...