我有一个全字母或全数字的值数组,需要以升序方式对它们进行排序。此外,我希望将所有数字值移动到数组的末尾,以便它们出现在所有非数字值之后。
$test = ["def", "yz", "abc", "jkl", "123", "789", "stu"];
如果我对其运行sort()
,我会得到:
Array
(
[0] => 123
[1] => 789
[2] => abc
[3] => def
[4] => jkl
[5] => stu
[6] => yz
)
但我想看看:
Array
(
[0] => abc
[1] => def
[2] => jkl
[3] => stu
[4] => yz
[5] => 123
[6] => 789
)
我尝试了array_reverse()
,但这似乎没有改变任何东西。我不知道如何获得最后的数字,但按升序排列。
最佳答案
您需要的是排序,但具有自定义比较函数(usort)。 下面的代码将完成它:
function myComparison($a, $b){
if(is_numeric($a) && !is_numeric($b))
return 1;
else if(!is_numeric($a) && is_numeric($b))
return -1;
else
return ($a < $b) ? -1 : 1;
}
$test = array("def", "yz", "abc", "jkl", "123", "789", "stu");
usort ( $test , 'myComparison' );
关于php - 对字母和数字字符串类型元素的数组进行 ASC 排序,但数字元素位于字母元素之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590002/