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

申し訳ありませんがわかりませんでしたが、実際には配列に3つの名前関連のフィールドがあります。 1つは[名前](あなたが使用した)と呼ばれ、2つはデータの「隠された」ビットで、FirstnameとLastnameは別々です。それらはそれぞれ[DataCategoryId] 165497と165498と結合されています。私は様々な試みで['165498']を参照しようとしましたが、まだ運がありません。 – LoDef

+0

私の編集を参照してください。その場合、 'array_search'と' array_column'を使って比較する値を見つけることができます。 '['165498']'はidがキーではなく値であるため動作しません。 –

+0

ありがとう、Björn! – LoDef

関連する問題