2017-05-29 43 views
1

我已經看過這麼多重複的問題。真的很抱歉有重複的問題。但沒有找到正確的解決方案或者可能沒有得到正確的邏輯。我已經使用usort()。 我有以下數組。比較和排序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 
     ) 
) 

通過使用在以下條件

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

在列表,打印所有CurrentName但 如果currenName是空白然後打印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

這可能不是最優的,但我在某些情況下,迭代對象在PHP的經驗可以產生相反的結果,爲了簡單起見,我將會分離根據您試圖實現的過濾進行排序。 將你的對象父母化到工作類,並將名稱檢索移動到方法將是很好的編程習慣。

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

usort($yvals, function ($elem1, $elem2) { 
    return strcmp($elem1->getProperName(), $elem2->getProperName()); 
}