2017-08-25 135 views
-1

這是數組的第一部分(從JSON提要派生而來)。重複塊位於[Attendee]內部,並從[0]開始。對複雜PHP數組進行排序

Array 
(
[Code] => 1 
[Message] => Successfully retrieved data 
[Result] => Array 
    (
     [Attendee] => Array 
      (
       [0] => Array 
        (
         [CountryCode] => 44 
         [DemographicData] => Array 
          (
          ) 

         [Email] => [email protected] 
         [FreeTextDataCategories] => Array 
          (
           [AttendeeFreeTextDataCategory] => Array 
            (
             [0] => Array 
              (
               [DataCategoryId] => 165497 
               [Value] => Firstname 
              ) 

             [1] => Array 
              (
               [DataCategoryId] => 165498 
               [Value] => Lastname 
              ) 

             [2] => Array 
              (
               [DataCategoryId] => 165500 
               [Value] => Job Title 
              ) 

             [3] => Array 
              (
               [DataCategoryId] => 165504 
               [Value] => Array 
                (
                ) 
              ) 
            ) 
          ) 

         [GuestOfAttendeeId] => Array 
          (
          ) 

         [Id] => 3344468 
         [Name] => Firstname Lastname 

         [Password] => Array 
          (
          ) 

         [PhoneNumber] => 123456789 
         [RegisteredVia] => Email 
         [RegistrationDate] => 2017-06-30T11:30:44.313 
         [SessionId] => 111222333 
         [Status] => Registered 
         [StatusDate] => 2017-06-30T11:30:44.313 
        ) 
      ) 
    ) 

我要排序的與會者[N]由姓氏,值我可以很容易地附和,但我不明白如何通過它來進行排序。 以下是我回音吧:

foreach ($result_array['Result']['Attendee'] as $row) {  
echo "<a href=\"mailto:" . $row["Email"] . "\">" . $row["FreeTextDataCategories"]["AttendeeFreeTextDataCategory"][0]["Value"] . " " . $row["FreeTextDataCategories"]["AttendeeFreeTextDataCategory"][1]["Value"]. " </a>"; } 

...我已經尋找存在的問題,並試圖以我的情況下適應這樣的解決方案,但都沒有成功: Sorting Complex Arrays by Name - Sort multidimensional array alphabetically - PHP Array Complex Sort

回答

0

你的問題是該姓氏不在自己的領域。所以你必須提取它(並祈禱你的數據是一致的)。

function cmp($x, $y) { 
    $categoryX = $x['FreeTextDataCategories']['AttendeeFreeTextDataCategory']; 
    $lastNameXKey = array_search('165498', array_column($categoryX, 'DataCategoryId')); 
    $categoryY = $y['FreeTextDataCategories']['AttendeeFreeTextDataCategory']; 
    $lastNameYKey = array_search('165498', array_column($categoryY, 'DataCategoryId')); 
    return strcmp($categoryX[$lastNameXKey]['Value'], $categoryY[$lastNameYKey]['Value']); 
} 

usort($result_array['Result']['Attendee'], 'cmp'); 
+0

對不起,如果我不清楚,但實際上有三個名稱相關的字段在數組中。一個名爲['Name'](您使用的名稱)以及兩個在數據中更深處的「隱藏」,Firstname和Lastname是分開的。它們分別與[DataCategoryId] 165497和165498耦合。我試圖在各種嘗試中提及['165498'],但仍然沒有運氣。 – LoDef

+0

看我的編輯。在這種情況下,您可以使用'array_search'和'array_column'來查找要比較的值。 '['165498']'不起作用,因爲ID不是一個鍵,而是一個值。 –

+0

謝謝Björn! – LoDef