2017-03-16 120 views
0

我正在尝试解决排序问题。 正如我写到标题,我需要按数字排序数组,但是当一些行具有相同的数字时,按字母排序它们。我试图用两种方法做到这一点,但是当我用数字排序而不是按字母排序时,它不起作用。所以我试图改变函数的顺序,但是在数字排序之后,它不会保持字母排序... 有人可以告诉我要编辑什么吗?下面按数字排序数组,当数字相同时,按字母排序

代码:

 $nodesToSort = $this->openedContextMenu->getPreparedNodes(); 

     $labelSort = function($x, $y) 
     { 
      $xTranslated = $this->getPresenter()->translator->translate($x->label); 
      $yTranslated = $this->getPresenter()->translator->translate($y->label); 
      return strcmp($xTranslated, $yTranslated); 
     }; 

     $compareSort = function ($a, $b) 
     { 
      if ($a->sort == $b->sort) { 
       return 0; 
      } 
      return ($a->sort < $b->sort) ? -1 : 1; 
     }; 

     usort($nodesToSort, $labelSort); 
     usort($nodesToSort, $compareSort); 
+1

你很不清楚?当你将相同的值排序为数字或字符串时,它会有什么不同?或者从哪里来一个数字和从哪里来的字母串?或者让我这样问:可能'sort'有数字和字母串吗?如果没有,从哪里来的字符串,你想采取排序。 – JustOnUnderMillions

+0

发布一些样本输入和期望的输出以使其更清楚。 – Bhaskar

回答

0

解决。 我只需要合并这两个函数。

$compareSort = function ($a, $b) 
    { 
     if ($a->sort == $b->sort) { 
      $xTranslated = $this->getPresenter()->translator->translate($a->label); 
      $yTranslated = $this->getPresenter()->translator->translate($b->label); 
      return strcasecmp($xTranslated, $yTranslated); 
     } 
     return ($a->sort < $b->sort) ? -1 : 1; 
    };