对数组进行排序并返回排序后的数组的函数

问题描述 投票:0回答:4

PHP 的原生排序函数通过引用进行修改,并且不返回排序后的数组。

我正在寻找一种可靠的标准方法来对数组进行排序,返回排序后的数组作为返回值。

我读过的所有 PHP.net 函数都返回 BOOLEAN 值,即 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。

php arrays sorting associative-array custom-function
4个回答
13
投票

这里有一句台词:

call_user_func(function(array $a){asort($a);return $a;}, $some_mixed_array);


5
投票

你能做到吗?

$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>';

4
投票

正如其他人所说,最好的选择是创建自定义函数。然而,为了保持 PHP 未来的灵活性,我将使用可变参数函数。本质上,您将函数设置为接受传递给它的任何参数,并将它们传递给实际的

sort()
函数。通过这种方式,您可以使用您要放置包装器的标准函数存在的任何可选参数 - 即使这些参数将来会发生变化。

function mysort( ...$params ) {
    sort( ...$params );
    return $params[0];
}

更新:相同的功能,但更容易理解:

function mysort( $array, ...$params ) {
    sort( $array, ...$params );
    return $array;
}

0
投票

从 PHP7 开始,如果您喜欢单行代码,您可以将输入数组提供给 IIFE。这不会改变原始数组,而是返回原始数组副本的变异版本。

代码:(演示

$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)
);
© www.soinside.com 2019 - 2024. All rights reserved.