【问题标题】:Sort a php array returning new array对返回新数组的php数组进行排序
【发布时间】:2013-09-14 06:24:46
【问题描述】:

我正在寻找一种可靠的标准方法来排序数组,返回排序后的(关联)数组作为返回值

我读过的所有关于返回 BOOLEAN 值或 0-1 的 PHP.net 函数。 我需要的方法是这样的:

$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 函数对数组的副本进行排序并返回结果?
  • 可以修改原始数组还是保持原样?如果没有,function custom_sort($a) { sort($a); return $a; }
  • 您的意思是“短”还是“排序”?在您的代码中,您有 short
  • 虽然排序函数返回一个布尔值,但它们仍然对您的数组进行排序 - 那么您要解决什么问题?
  • 为什么这么多反对票?!这似乎是一个很好的问题,有一个很好的明确答案。作为想要这个的原因,你有一个像这样的单行代码:assert(sort(array_keys($myData)) == array('x','y')) 这失败了“只有变量应该通过引用传递”。

标签: php arrays sorting associative-array


【解决方案1】:

这是一个单行:

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

【讨论】:

    【解决方案2】:

    你能做到吗?

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

    【讨论】:

    • 您应该警告这两种解决方案会做两件不同的事情。第一个不会更改原始数组,而第二个会更改。另外,在数字索引数组上使用asort 非常奇怪。您维护原始密钥,但您无法自然地对其进行迭代。它失去了纯数组的性质。
    • sorted是python使用的函数名
    【解决方案3】:

    正如其他人所说,您最好的选择是创建自定义函数。但是,为了保持 PHP 未来的灵活性,我会使用variadic function。本质上,您将函数设置为接受传递给它的任何参数,并将它们传递给实际的sort() 函数。通过这种方式,您可以将任何可选参数用于您放置包装器的标准函数——即使这些参数在未来发生变化。

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

    【讨论】:

      猜你喜欢
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多