2016-06-17 15 views
0

私はgroupNameによってソートされている多次元配列を持っています(パーツは正常に動作します)。各グループの中には値(groupName、firstName、lastNameなど)があります。基本的に私はfirstNameということで、この多次元配列内の各グループをソートするためにしようとしていると私はわからないんだけどどこから始めれば:(ここに私のmutidimensional配列です:。PHPでfirstNameで多次元配列をソートするには?

 function group_assoc($array, $key) 
     { 
      $array_of_groups = array(); 
      foreach ($array as $value) { 
       $array_of_groups[$value[$key]][] = $value; 
      } 
      return $array_of_groups; 
     } 


     $somearray = array(
      array('groupName' => 'Group1', 'phoneNumber' => 13037777777, 'firstName'=>'Jeff','lastName' => 'Jeff'), 
      array('groupName' => 'Group2', 'phoneNumber' => 13033213453, 'firstName'=>'Zumia','lastName' => 'Brown'), 
      array('groupName' => 'Group3', 'phoneNumber' => 13030098342, 'firstName'=>'Junior','lastName' => 'White'), 
      array('groupName' => 'Group2', 'phoneNumber' => 13039899231, 'firstName'=>'Ana','lastName' => 'McLwius'), 
      array('groupName' => 'Group1', 'phoneNumber' => 13033422109, 'firstName'=>'first','lastName' => 'last'), 
      array('groupName' => 'Group3', 'phoneNumber' => 13033222098, 'firstName'=>'Junior','lastName' => 'Smith') 
     ); 


     $account_requests = group_assoc($somearray, 'groupName'); 
     print_r($account_request); 

と配列を印刷し、私はこれを取得します

Array 
(
[Group1] => Array 
    (
     [0] => Array 
      (
       [groupName] => Group1 
       [phoneNumber] => 13037777777 
       [firstName] => Mike 
       [lastName] => Jeff 
      ) 

     [1] => Array 
      (
       [groupName] => Group1 
       [phoneNumber] => 13033422109 
       [firstName] => Ben 
       [lastName] => Morris 
      ) 

    ) 

[Group2] => Array 
    (
     [0] => Array 
      (
       [groupName] => Group2 
       [phoneNumber] => 13033213453 
       [firstName] => Zumia 
       [lastName] => Brown 
      ) 

     [1] => Array 
      (
       [groupName] => Group2 
       [phoneNumber] => 13039899231 
       [firstName] => Ana 
       [lastName] => McLwius 
      ) 

    ) 

[Group3] => Array 
    (
     [0] => Array 
      (
       [groupName] => Group3 
       [phoneNumber] => 13030098342 
       [firstName] => Junior 
       [lastName] => White 
      ) 

     [1] => Array 
      (
       [groupName] => Group3 
       [phoneNumber] => 13033222098 
       [firstName] => Junior 
       [lastName] => Smith 
      ) 

    ) 

) 

私はそれは単純な配列(多次元配列ではない)であった場合、私はちょうど行うことができます知っている?!

usort($peopleArray, function ($v1, $v2) { 
     return strcmp($v1['firstName'], $v2['firstName']); 
    }); 

これを実現する方法上の任意のアイデアください事前のおかげでたくさん

+0

を並べ替えることができますが、元の配列を提供することができます最初のグループ毎に行を必要としますprint_rではなく – Kld

+0

@Kldはい質問を更新しました。それを見てください。どうもありがとう!! – progx

+0

最初にグループ化し、各グループを並べ替えます。どうしたの? –

答えて

1

まず、各グループをソートし、適切な項目にグループを作成します。

$groups = array(); 
foreach ($someArray as $item) { 
    $groupName = $item['groupName']; 
    if (!isset($groups[$groupName])) { 
     $groups[$groupName] = array(); 
    } 
    $groups[$groupName][] = $item; 
} 

foreach ($groups as &$group) { 
    usort($group, function ($v1, $v2) { 
     return strcmp($v1['firstName'], $v2['firstName']); 
    }); 
} 
+0

正確にeveythingとタイプしましたか?あなたは$&groupと入力していますか?あなたはあなたの答えを更新できますか?どうもありがとう! – progx

+0

あなたのコードの7行目にもエラーがあります。$ groups [$ group] [] = $ item; – progx

+0

'group'ではなく' groupName'を除くすべてが正しいです。 –

1

あなたはその後、湯が各グループに

$someArray = array(
       array('groupName' => 'Group1', 'phoneNumber' => 13037777777, 'firstName'=>'Mike','lastName' => 'Jeff'), 
       array('groupName' => 'Group2', 'phoneNumber' => 13033213453, 'firstName'=>'Zumia','lastName' => 'Brown'), 
       array('groupName' => 'Group3', 'phoneNumber' => 13030098342, 'firstName'=>'Junior','lastName' => 'White'), 
       array('groupName' => 'Group2', 'phoneNumber' => 13039899231, 'firstName'=>'Ana','lastName' => 'McLwius'), 
       array('groupName' => 'Group1', 'phoneNumber' => 13033422109, 'firstName'=>'Ben','lastName' => 'Morris'), 
       array('groupName' => 'Group3', 'phoneNumber' => 13033222098, 'firstName'=>'Junior','lastName' => 'Smith') 
      ); 

    $sortedArr = array(); 
    foreach($someArray as $row) { 
     $sortedArr[$row['groupName']][] = $row; 
    } 


    foreach ($sortedArr as &$group) { 
     usort($group, function ($v1, $v2) { 
      return strcmp($v1['firstName'], $v2['firstName']); 
     }); 
    } 

    print_r($sortedArr);