2011-11-02 19 views
5

大丈夫、私は名前を輸送するために使用された配列を持って、それは次のようになります。今多次元連想配列をソートしますか?

array(2) { 
    [0]=> 
    array(3) { 
    ["firstName"]=> 
    string(3) "Joe" 
    ["lastName"]=> 
    string(5) "Black" 
    ["uid"]=> 
    int(3225) 
    } 
    [1]=> 
    array(3) { 
    ["firstName"]=> 
    string(4) "John" 
    ["lastName"]=> 
    string(3) "Doe" 
    ["uid"]=> 
    int(3516) 
    } 
} 

、どのように私はlastNameにより、この配列をソートしますか?

+9

関連の質問は1ではないかもしれませんがあなたの状況に合ったものであり、その大部分にはあなたの仕事を完了するために必要な機能と説明が含まれています。 –

+2

[多次元配列をソート]の可能な複製(http://stackoverflow.com/questions/648405/sort-a-multi-dimensional-array) – Neal

+2

http:// stackoverflowでほとんど正確に(キーの変更が必要) .com/questions/3596011/sort-an-array-base-on-key – jprofitt

答えて

15

StackOverflowのは、同様の質問をたくさん持っていますが、私はあなたに簡単な例を与えてみましょう。このために、usort()機能を使用することができます。

PHP 5.3の例(1素敵な、しかし、理解しやすいかもしれません):

uasort($array, function ($i, $j) { 
    $a = $i['lastName']; 
    $b = $j['lastName']; 
    if ($a == $b) return 0; 
    elseif ($a > $b) return 1; 
    else return -1; 
}); 
+0

「if .. else」はすべて必要ですか?これは単純に 'return $ i ['lastName']> $ j ['lastName'];' – galdikas

+0

@galdikasにリファクタリングすることができると思います。この関数は、関数が1,0または-1を返さなければならないと伝えます。私は非常に長い時間PHPに触れてhavent。 – kapa

2

私はphp.netに投稿されたとして、あなたはこの機能を使用することができます。

<?php 

function sksort(&$array, $subkey="id", $sort_ascending=false) { 

    if (count($array)) 
     $temp_array[key($array)] = array_shift($array); 

    foreach($array as $key => $val){ 
     $offset = 0; 
     $found = false; 
     foreach($temp_array as $tmp_key => $tmp_val) 
     { 
      if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) 
      { 
       $temp_array = array_merge( (array)array_slice($temp_array,0,$offset), 
              array($key => $val), 
              array_slice($temp_array,$offset) 
             ); 
       $found = true; 
      } 
      $offset++; 
     } 
     if(!$found) $temp_array = array_merge($temp_array, array($key => $val)); 
    } 

    if ($sort_ascending) $array = array_reverse($temp_array); 

    else $array = $temp_array; 
} 

?> 
1

ショートと再利用可能な方法:1:

usort($array, 'nameSort'); 

function nameSort($a, $b) 
{ 
    return strcmp($a['lastName'], $b['lastName']); 
} 
+1

また、クラス内でこれを行っている場合は、次のように、usortへの文字列の代わりに配列を渡します: 'usort($ array、array($ this、 'nameSort'));' – Justin