根据元素内的数值按数字顺序排序数组


Sort Array in numerical order based on a numerical value within the element

如何根据元素中的数值对数组按数字顺序排序:其中元素是String?

例如

。来自:

Array(
0 => One:3 
1 => Two:1
2 => Three:4
3 => Four:2
)

:

Array(
    0 => Two:1
    1 => Four:2
    2 => One:3
    3 => Three:4
    )

给定输入数组:

$arr = array('One:3','Two:1','Three:4','Four:2');
usort($arr, function($a, $b) {
  return filter_var($a, FILTER_SANITIZE_NUMBER_INT) - filter_var($b, FILTER_SANITIZE_NUMBER_INT);
});
print_r($arr);

输出:

Array
(
    [0] => Two:1
    [1] => Four:2
    [2] => One:3
    [3] => Three:4
)

如果您的字符串遵循此模式,则可以使用wassort()函数并构建一个对其进行排序的函数。例子:

$elements = array('One:3','Two:1','Three:4','Four:2');
uasort($elements, function($a, $b){
    $a = array_pop(explode(':', $a));
    $b = array_pop(explode(':', $b));
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
});
print_r($elements); // Array ( [1] => Two:1 [3] => Four:2 [0] => One:3 [2] => Three:4 )