2010-11-02 4 views
26

J'ai un tableau de php comme:tableau de chaînes tri numérique en php

myarr[1] = "1", 
myarr[2] = "1.233", 
myarr[3] = "0", 
myarr[4] = "2.5" 

les valeurs sont en fait de chaînes, mais je veux ce tableau à trier numériquement, en tenant compte également des valeurs de flotteur et le maintien de l'association des index.

S'il vous plaît aidez-moi. Merci

+0

Fist of, est-il normal que vous avez défini deux fois l'index 1? –

Répondre

49

Vous pouvez utiliser la fonction sort normale. Il faut un deuxième paramètre pour dire comment vous voulez le trier. Choisissez SORT_NUMERIC.

Exemple:

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

impressions

Array 
(
    [0] => 0 
    [1] => 1 
    [2] => 1.233 
    [3] => 2.5 
) 

à jour: Pour le maintien de paires clé-valeur, utiliser asort (prend les mêmes arguments) Résultat:

Array 
(
    [3] => 0 
    [1] => 1 
    [2] => 1.233 
    [4] => 2.5 
) 
+0

une belle @Felix – Adnan

1

Utilisez la fonction php usort et dans votre fonction de rappel, convertissez vos chaînes en flottants pour les comparer.

0

Vous pouvez convertir vos chaînes en nombres réels (flotteurs) et les trier ensuite:

foreach ($yourArray as $key => $value) { 
    $yourArray[$key] = floatval($value); 
} 

sort($yourArray, SORT_NUMERIC); 
9

Utiliser natsort()

$myarr[1] = "1"; 
$myarr[2] = "1.233"; 
$myarr[3] = "0"; 
$myarr[4] = "2.5"; 

natsort($myarr); 
print_r($myarr); 

Sortie:

Array ([2] => 0 [0] => 1 [1] => 1.233 [3] => 2.5)