PHP 的原生排序函数通过引用进行修改,并且不返回排序后的数组。
我正在寻找一种可靠的标准方法来对数组进行排序,将排序后的数组作为返回值返回。
我读过的所有 PHP.net 函数都返回布尔值或 0-1。
我需要的方法是这样的:
$some_mixed_array = array( 998, 6, 430 );
function custom_sort( $array )
{
// Sort it
// return sorted array
}
custom_sort( $some_mixed_array );
// returning: array( 6, 430, 998 )
无需处理字符串,只需处理 INT-s。
这是一个单行:
call_user_func(function(array $a){asort($a);return $a;}, $some_mixed_array);
你能
做到这一点吗?
$some_mixed_array = array( 998, 6, 430 );
function custom_sort( $array )
{
// Sort it
asort($array);
// return sorted array
return $array;
}
custom_sort( $some_mixed_array );
// returning: array( 6, 430, 998 )
这也将解决您的问题:
$some_mixed_array = array( 998, 6, 430 );
echo '<pre>'.print_r($some_mixed_array, true).'</pre>';
asort($some_mixed_array); // <- BAM!
// returning: array( 6, 430, 998 )
echo '<pre>'.print_r($some_mixed_array, true).'</pre>';
正如其他人所说,最好的选择是创建自定义函数。 但是,为了保持PHP未来的灵活性,我将使用可变参数函数。实质上,您将函数设置为接受传递给它的任何参数,并将它们传递给实际的sort()
函数。这样,你可以对你放置包装器的标准函数使用任何存在的可选参数——即使这些参数在未来发生变化。
function mysort( ...$params ) {
sort( ...$params );
return $params[0];
}
更新:相同的功能,但更容易理解:
function mysort( $array, ...$params ) {
sort( $array, ...$params );
return $array;
}
从 PHP7 开始,如果你喜欢单行代码,你可以直接在闭包(匿名函数)之后附加你的输入数组。这不会改变原始数组,但返回原始数组副本的突变版本。
代码:(演示)
$some_mixed_array = [998, 6, 430];
var_export(
(function($v) { sort($v); return $v; })($some_mixed_array)
);
-
(function($v) { sort($v); return $v; })
是关闭。 -
($some_mixed_array)
是函数签名中的单个参数。
排序后,sort()
不会保留数组的键。
排序后,asort()
将保留数组的键。
如果你喜欢简洁并且不介意使用三元条件,你可以享受PHP的箭头函数语法。(演示)
var_export(
(fn($v) => sort($v) ? $v : $v)($some_mixed_array)
);