2011-07-28 11 views
0

私は不規則なPHP配列を並べ替えようとしています。構造が通常のphp配列と異なる点で不規則です。私は通常usortを使って配列をソートできますが、このPHP配列の構造はusortを使いにくくします。不規則なphp配列を並べ替える

  Array 
(
    [id] => Array 
     (
      [0] => 3220604 
      [1] => 5341522 
      [2] => 1234568144 
      [3] => 11 
     ) 

    [firstname] => Array 
     (
      [0] => Sam 
      [1] => Donald 
      [2] => Keesh 
      [3] => Eat 
     ) 

    [lastname] => Array 
     (
      [0] => Fisher 
      [1] => Duck 
      [2] => Smelley 
      [3] => Me 
     ) 

) 

私はIDでソートしようとしていますが、私はusortを使用している場合はもちろん、それはまず、IDと同様に、最上位の配列でソートしようとし、最後に:ここでは、アレイの基本的な構造です。このような構造の配列をどのように並べ替えるのですか?

+1

後にこの機能おそらくこれは役立つだろう:http://php.net/manual/en/function.array-multisort.php私はありません私はあなたのためにそれがどれほど有用であるかについて私は保証しないので、答えとしてこれを置く。私がそれを使用するたびに、私は頭を傷つけていますが、おそらくあなたは私よりもスマートになるでしょう。 – nickf

答えて

2

あなたがこれを行うにはarray_multisortを使用することができます。

$arr = array(
    'id' => array(3220604, 5341522, 1234568144, 11), 
    'firstname' => array('Sam', 'Donald', 'Keesh', 'Eat'), 
    'lastname' => array('Fisher', 'Duck', 'Smelley', 'Me') 
); 

array_multisort($arr['id'], $arr['firstname'], $arr['lastname']); 
var_dump($arr); 

ここarray_multisortは、最初の配列の値をソートし、それに応じて他の配列の値を命令。

しかし、別のデータ構造を使用することもお勧めします。

+0

ベストソリューション!!!! –

2

方法について: ((11 'サム'、 'フィッシャー')、(2352335、 '名前'、 '最後')、...)

IDが他と関連している。この方法情報のビット。現在、あなたの頭の中にあるものを除いて、さまざまな配列間に実際の関係はありません。それらはテーブルの行/列に似ていません。

0

あなただけのIDでソートしたい場合は、

asort($aryName['id']); 

を行うことができますこれは、IDをソートしますが、最初の人物と最後の名前を参照するために、正しい自分のキーを維持します。

あなたはあなたがあなたに、アレイを再構築すべきであるのと同じ方法

asort($aryName['id']); 
asort($aryName['firstname']); 
asort($aryName['lastname']); 
1

他のサブアレイを並べ替えることもできます。これは、あなたの人生を容易にします

array(array('id' => 1, 'first_name' => 'David', 'last_name' => 'Smith'))

。ここhttp://www.whypad.com/posts/php-sort-multi-dimensional-array/848/から機能を見てみましょう:

function sortMultiArray(&$array, $key) { 
    foreach($array as &$value) { 
     $value['__________'] = $value[$key]; 
    } 
    /* Note, if your functions are inside of a class, use: 
     usort($array, array("My_Class", 'sort_by_dummy_key')); 
    */ 

    usort($array, 'sort_by_dummy_key'); 

    foreach($array as &$value) { // removes the dummy key from your array 
     unset($value['__________']); 
    } 
    return $array; 
} 

function sort_by_dummy_key($a, $b) { 
    if($a['__________'] == $b['__________']) return 0; 
    if($a['__________'] < $b['__________']) return -1; 
    return 1; 
} 
0

アレイの構造を変更できますか?それが現在概説されている方法は、貧弱なデザインです。 (上記のとおり)次にあなたがソートするusort関数を使用することができ

array 
(
    0 => array(
     'id'  => 3220604, 
     'firstname' => 'Sam', 
     'lastname' => 'Fisher' 
    ), 

    1 => array(
     'id'  => 5341522, 
     'firstname' => 'Donald', 
     'lastname' => 'Duck' 
    ), 
); 

:よう

何か。さらに重要なことに、データはより論理的で扱いやすい方法で保存されます。

0

は、より簡単に並べ替えになります

$allInOneArray= array (
    "id1" => array("firstname" => "Peter", "lastname" => "Paul"), 
    "id2" => array("firstname" => "Mary", "lastname" => "May") 
    //etc 
); 

のような配列を構築することができます。

0

使用前とclasical usort()ソリューション

function transpose($M){ 
    foreach ($M as $row=>$cols) foreach ($cols as $col=>$value) $Mt[$col][$row]=$value; 
    return ($Mt);   
}