2010-07-23 4 views
1

J'ai un tableau que je souhaite trier, il contient des images avec des extensions de fichiers, le nom de fichier est numérique et l'extension du fichier est évidemment une chaîne.Tri d'un tableau correctement avec php

$files = array(); 
$files[] = '4.jpg'; 
$files[] = '14.jpg'; 
$files[] = '1.jpg'; 
$files[] = '44.jpg'; 

Si j'utilise sort() puis je me retrouve avec les éléments suivants:

sort($files); 
print_r($files); 

Array 
(
    [0] => 1.jpg 
    [1] => 14.jpg 
    [2] => 4.jpg 
    [3] => 44.jpg 
) 

Ce que je veux vraiment est:

Array 
(
    [0] => 1.jpg 
    [1] => 4.jpg 
    [2] => 14.jpg 
    [3] => 44.jpg 
) 

Est-ce possible?

Répondre

4

Le plus rapide façon de le faire est avec natsort() plus facile - http://php.net/manual/en/function.natsort.php

par exemple:

natsort($files); 
print_r($files); 

Array 
(
    [0] => 1.jpg 
    [1] => 4.jpg 
    [2] => 14.jpg 
    [3] => 44.jpg 
) 

Cette fonction implémente un algorithme de tri qui traite les chaînes alpha-numériques comme un être humain serait tout en maintenant la clé/associations de valeur. Ceci est décrit comme un "ordre naturel".

vous pouvez également utiliser sort_flags option dans la fonction sort()

sort($files, SORT_NUMERIC); 
print_r($files); 

Array 
(
    [0] => 1.jpg 
    [1] => 4.jpg 
    [2] => 14.jpg 
    [3] => 44.jpg 
) 

Le second paramètre optionnel sort_flags peuvent être utilisés pour modifier le comportement de tri en utilisant ces valeurs:

drapeaux type de tri:

SORT_REGULAR - comparer les articles normalement (ne pas changer les types)

SORT_NUMERIC - comparer les éléments numériquement

SORT_STRING - comparer les articles sous forme de chaînes

SORT_LOCALE_STRING - comparer les articles sous forme de chaînes, en fonction de la configuration locale. Ajouté en PHP 4.4.0 et 5.0.2, il utilise les paramètres régionaux du système, qui peuvent être modifiés en utilisant setlocale().

+0

vous avez obtenu votre mauvais exemple: P – knittl

+0

oups .. merci .. maintenant fixé – Lizard

0
$files = array(); 
$files[] = '4.jpg'; 
$files[] = '14.jpg'; 
$files[] = '1.jpg'; 
$files[] = '44.jpg'; 
sort($files, SORT_NUMERIC); 
print_r($files); 

Array 
(
    [0] => 1.jpg 
    [1] => 4.jpg 
    [2] => 14.jpg 
    [3] => 44.jpg 
)