【问题标题】:PHP uSort Optimization?PHP uSort 优化?
【发布时间】:2012-06-19 11:28:25
【问题描述】:

只是想知道是否有人可以将这个 usortMonths() 函数优化得更好?基本上我有一个未排序的月份数组,$bob,我希望它们按月份排序,而不是按字母顺序。

代码运行良好,但这是我第一次使用 uSort,我不介意是否有人可以提出任何改进建议?

function usortMonths($a, $b) {
$months = array('JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER');
    $key = array(0 => 0,1 => 0,2 => FALSE, 3 => FALSE);
    if(array_search(strtoupper($a),$months)!==FALSE) {
        $key[0] = array_search(strtoupper($a),$months);
        $key[2] = TRUE; }
    if(array_search(strtoupper($b),$months)!==FALSE) {
        $key[1] = array_search(strtoupper($b),$months);
        $key[3] = TRUE; }
    if($key[2] && $key[3]){
        if($key[0] < $key[1]) {return -1;}
        if($key[0] == $key[1]){return 0;}
        if($key[0] > $key[1]) {return 1;}
    }
}

$bob = array('april','august','december','february','January','july','june','march','may','november','october','september',);       
usort($bob,"usortMonths");
var_dump($bob);

【问题讨论】:

  • 代替&lt;code&gt;-tags,使用4个空格的缩进使文本显示为代码。如果您需要缩进一个大块,您只需选择该文本并点击{} 按钮。
  • @Wrikken 谢谢 - 以后我会记住的! :)
  • 我会将月份替换为月份编号,然后进行比较。现在,您正在通过数组引用将月份转换为数字版本,以进行每次比较。您要处理的数组大小是多少?顺便说一句:这更像是代码审查 (codereview.stackexchange.com) 的问题,而不是 stackoverflow 的问题。
  • @Arend,是的,但那肯定涉及更改输入数组,我不能这样做。而且我什至不知道代码审查 - 对不起!

标签: php usort


【解决方案1】:

这个怎么样?

function usortMonths($a, $b) {
    $months = array('JANUARY','FEBRUARY','MARCH','APRIL','MAY','JUNE','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER');
    return array_search(strtoupper($a), $months) - array_search(strtoupper($b), $months);
}

【讨论】:

  • 嗯,这是一种非常有效的方法。杰出的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2012-03-18
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多