2017-08-16 5 views
-1

Je veux trier sur le champ banner_id (int). Mais quand je cours, j'obtiens un résultat étrange.php usort() résultats dans un résultat étrange

Le résultat de cette usort() est le suivant:

101 - 204- 34 - 45 - 69 - etc.

Je dois obtenir:

34 - 45 -69 - 101 - 204

function usort_reorder($a,$b){ 
    $orderby = (!empty($_REQUEST['orderby'])) ? $_REQUEST['orderby'] : 'banner_id'; 
    $order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'asc'; 
    $result = strcmp($a[$orderby], $b[$orderby]); 
    return ($order==='asc') ? $result : -$result; 
} 

usort($data, 'usort_reorder'); 

Que faire pour que ce tri soit correct? Signifie non seulement le premier chiffre mais le chiffre entier. Maintenant, il ne prend que le premier.

+3

'strcmp' compare les valeurs sous forme de chaînes, pas des nombres. – Ryan

+0

quel genre de comparaison devrais-je utiliser ici alors? – Hermants

+0

Si votre champ '$ a [$ orderby]' est numérique, vous pouvez simplement utiliser '$ result = $ a [$ orderby]> $ b [$ orderby];'. – xander

Répondre

0
function sortScripts($a, $b) 
{ 
    return $a['order'] - $b['order']; 
} 

Utilisez $b-$a si vous souhaitez inverser l'ordre.

Si les nombres en question dépassent la plage d'entiers de PHP, return ($a < $b) ? -1 : (($a > $b) ? 1 : 0) est plus robuste.

Vous pouvez vérifier ce lien pour plus de compréhension strcmp equivelant for integers (intcmp) in PHP