2017-05-29 18 views
1

私は重複した質問をたくさん見ました。重複した質問で本当に申し訳ありません。正しい解決策が見つからないか、正しいロジックが得られない可能性があります。私はすでにこれらのためにusort()を使いました。 私は以下の配列を持っています。 currenNameが空白の場合2d配列をPHPのサブ値で比較して並べ替えます

Array 
(
    [0] => stdClass Object 
     (
      [id] => 808 
      [ScreenName] => Dispatch 
      [OriginalName] => First Unit on Scene 
      [OriginalPrintName] => First Unit on Scene 
      [CurrentName] => Blank 
     ) 

    [1] => stdClass Object 
     (
      [id] => 809 
      [ScreenName] => Dispatch 
      [OriginalName] => EMS Agency 
      [OriginalPrintName] => EMS Agency 
      [CurrentName] => Blank 
     ) 

    [2] => stdClass Object 
     (
      [id] => 597 
      [ScreenName] => Dispatch 
      [OriginalName] => Date 
      [OriginalPrintName] => Date 
      [CurrentName] => Date 
     ) 
    [3] => stdClass Object 
     (
      [id] => 509 
      [ScreenName] => Dispatch 
      [OriginalName] => Incident # 
      [OriginalPrintName] => Incident # 
      [CurrentName] => Incident # 
     ) 
    [4] => stdClass Object 
     (
      [id] => 758 
      [ScreenName] => Dispatch 
      [OriginalName] => Run# /Call # 
      [OriginalPrintName] => Run# 
      [CurrentName] => Run Call 
     ) 
) 
すべてCurrentNameを、リストには以下の条件

if (($y2->CurrentName == "") || ($y2->CurrentName == "Blank")) { 
    print $y2->OriginalName ; 
} else { 
    print $y2->CurrentName ; 
} 

を使用して印刷することにより

しかし 、その後ORIGINALNAMEにこれらのような
何かを印刷します。

Date 
Incident # 
Run Call 
Type Of Service Req 
Complaint Reported 
Response Urgency 
Location Type 
Address Type 
Address 
Address Cont 

私はalbhabeticallyソートされたこれらのリストを表示したいです。 マイusort()関数はすべてのためにどこかではなく、作業

usort($yvals, function ($elem1, $elem2) { 
     if (($elem1->CurrentName == "" || $elem1->CurrentName == "Blank") && ($elem2->OriginalName == "" || $elem2->OriginalName == "Blank")) { 
     return strcmp($elem1->OriginalName, $elem2->OriginalName); 
    }else if(($elem1->CurrentName != "" || $elem1->CurrentName != "Blank") && ($elem2->CurrentName == "") || ($elem2->CurrentName == "Blank")){ 
     return strcmp($elem1->CurrentName, $elem2->OriginalName); 
    }else{ 
    return strcmp($elem1->CurrentName, $elem2->CurrentName); 
    } 
}); 

そのです。

+0

現在の出力とは何か、予想される出力は何ですか?人々があなたが持っている問題を理解できるように、単に「働かない」以上の詳細を追加してください。 –

+0

何を得ようとしていますか? – hassan

+0

入力と出力を表示してください – calexandre

答えて

0

のstrcmpの代わりにstrcasecmpをお試しください...

0

これは最適ではないかもしれませんが、いくつかのケースでは、PHPでオブジェクトを反復して、私の経験は、私が分離う簡略化のために、直感的な結果を生成することができます一度に達成しようとしているフィルタリングからソートします。 また、オブジェクトを実用的なクラスに親子化し、名前の取得をメソッドに移すことは、良いプログラミングの練習になります。

class SomeWorkingClass{ 
    public function getProperName(){ 
    // proper name retrieval functionality 
    } 
} 

usort($yvals, function ($elem1, $elem2) { 
    return strcmp($elem1->getProperName(), $elem2->getProperName()); 
} 
関連する問題