2017-08-25 136 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