2017-03-16 124 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; 
    };