我误解了为什么不起作用以及如何解决?

时间:2019-12-21 17:12:44

标签: php

我的练习是将所有字符首先按字母顺序排列,然后按数字顺序排列,最后按所有其他字符排列,每个字符按ASCII顺序按以下3组进行排列。 就像

./ssap.php toto tutu 4234 "_hop A2l+ XXX" ## "1948372 AhAhAh"
AhAhAh 
A2l+
toto 
tutu
XXX 
1948372
4234 
##
_hop 

1 个答案:

答案 0 :(得分:0)

您不能使用简单的asort来完成此操作,而应将其替换为uasort

这暗示了一种可能的方法,您可以通过添加更多条件来完成此操作(请参阅内部注释):

uasort($ar, function($a, $b) {
    if(ctype_alpha(substr($a, 0, 1)) && is_numeric(substr($b, 0, 1))) {
        echo "comparing $a $b\n";
        return -1;
    }
    if(ctype_alpha(substr($b, 0, 1)) && is_numeric(substr($a, 0, 1))) {
        echo "comparingx $a $b\n";
        return 1;
    }

    // add more code here to compare words with non-alphanumeric characters
    // and other custom conditions if you find some issues

    return ($a < $b) ? -1 : 1;
});