2017-05-16 1 views
1

J'essaye de trier un tableau qui a des chaînes alphanumériques avec des longueurs différentes. Je vais avoir quelques difficultés avec cette comparaison:php strnatcasecmp() comportement erratique

>>> strnatcasecmp("IG2349", "IG56LR1617617") 
=> 1 

Comme vous pouvez le constater, le résultat indique que « IG2349 » est supérieur à « IG56LR1617617 », donc « IG56LR1617617 » apparaît avant « IG2349 » après le tri.

Mais un regard sur les cordes, après les deux premiers caractères (égaux), le troisième est plus faible sur la première chaîne que sur la deuxième chaîne, de sorte que le résultat devrait être < 1.

Ceci est testé sur php 5.6.20.

Répondre

0

Utilisez comparaison les données binaires strcasecmp au lieu de naturel:

strcasecmp("IG2349", "IG56LR1617617"); 
+0

Je sais, mais je dois comparaison naturelle si « G1 » vient avant « G10 ». – underdpt