2017-03-16 3 views
0

ソートの問題を解決しようとしています。 私はタイトルに書いたので、数字で配列を並べ替える必要がありますが、同じ数字を持つ行がある場合はアルファベット順に並べ替えます。私は2つの種類でこれをしようとしていましたが、数字で並べ替えを使用し、アルファベットで2番目のものよりも機能しません。したがって、関数の順序を変更しようとしましたが、アルファベット順の並べ替えをしていません... 誰かが私に何を編集してください教えてもらえますか?以下同じ番号がアルファベット順に並べられている場合は、配列を数値で並べ替えます。

コード:

 $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

を解決しました。 私はその2つの機能をマージしなければなりませんでした。

$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; 
    }; 
関連する問題