2011-06-22 31 views
0

によりマルチアレイをソート私はこの配列インナー値

[Computers] => Array 
(
    [0] => Array 
     (
      [product_id] => 78 
      [category_name] => Computers 
      [sort_order] => 1 
     ) 

    [1] => Array 
     (
      [product_id] => 70 
      [category_name] => Computers 
      [sort_order] => 1 
     ) 

) 


[Scanners] => Array 
(
    [0] => Array 
     (
      [product_id] => 65 
      [category_name] => Scanners 
      [sort_order] => 6 
     ) 

) 

[Printers] => Array 
(
    [0] => Array 
     (
      [product_id] => 58 
      [category_name] => Printers 
      [sort_order] => 3 
     ) 

) 
[Screens] => Array 
(
    [0] => Array 
     (
      [product_id] => 62 
      [category_name] => Screens 
      [sort_order] => 2 
     ) 

) 

を持っている私は、キーsort_orderに基づいて配列をソートする方法を見つけるように見える傾けます。私はhereからすべての例を試しましたが、運はありません。私はこの順序で配列

Computers 
Screens 
Printers 
Scanners 
+0

可能重複(http://stackoverflow.com/questions/2699086/php-sort-multidimensional-array-by-value ) – hakre

+0

あなたが私の質問を見ると、私の質問に内部の配列があるので、私は運がないこれらすべてのソリューションを試したことを明確に述べています – Trace

+0

あなたの実際の問題は、 – hakre

答えて

1

あなたは単に間違ったレベルでソートパラメータを持っている

function aasort (&$array, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($array); 

    foreach ($array as $ii => $va) { 
      foreach ($array[$ii] as $i => $val) { 
       $sorter[$ii]=$val[$key]; 
      } 
    } 
    asort($sorter); 
    foreach ($sorter as $element => $value) { 
     $ret[$element]=$array[$element]; 
    } 
    $array=$ret; 
} 

aasort($array,"sort_order"); 
+4

アトリビューションしてください。 – mario

+0

あなたは帰属をどういう意味ですか – Trace

+0

もう一度ありがとうございました – Trace

1

これを試してみる必要があります。あなたは最高のレベルを正しくソートしたいですか?だからソートパラメータも入れてください。ネストした場合、あなたはそれが恐ろしいソートアルゴリズムのために作るだろう持っているようなデータ構造で深いようソート順

[Computers] => Array 
(
    [sort_order] => 1, 
    [data] => array(
     [0] => Array 
      (
       [product_id] => 78, 
       [category_name] => Computers, 
       [sort_order] => 1, 
      ) 
    ) 
) 

:次のデータ構造は、はるかに理にかなって。

0

これは十分なものでなければならない:[値によってPHPソート多次元配列]の

uasort($yourArray, 
     create_function('$a,$b','return $a[0]["sort_order"] > $b[0]["sort_order"];'));