2011-01-26 19 views
1

で配列をソートすることにより、階層構造を模倣しようとすると:これまでは、私は、配列にPHPで次のように並べ替えしようとしていますPHP

array 
0 => id:1203 
     parent_id: 456 

1 => id:456 
     parent_id:1723 

2 => id:1723 
     parent_id:0 

array 
0 => id:1723 
     parent_id:0 

1 => id:456 
     parent_id:1723 

2 => id:1203 
     parent_id:456 

私は前にPHPで配列をソートしたことがありません。どうしますか?

おかげ

+0

私が正しく理解していればそれで、あなたはPARENT_IDが前のIDになるように並べ替えしようとしていますか?カスケードを開始するには、最初のIDをどのように決定する必要がありますか? – WebChemist

+0

私の遅い返事には申し訳ありません。しかし、最初のIDは親IDを持たないIDです。それを木のように描きなさい。配列にparent_idがない場合は、基本的にはルートです。 – Kel

答えて

0

は私が判断基準は、あなたが並べ替えに使用するいただきました!参照いけません。とにかく、uasort functionを使用することができます。この関数では、カスタム関数を引数として渡します。その関数では、配列を並べ替える条件を定義できます。その関数は2つの引数(比較する2つの変数)を受け取り、parent_id(または比較したいもの)を比較することができます。あなたのカスタム関数が返すべきものを知るには、this outをチェックしてください。

usortの代わりにuasortを使用すると、配列のインデックスを保持できます(例のように)。

1

これはあなたがしたいことですか?

$arr = array(
    array('id' => 1203, 'parent_id' => 456), 
    array('id' => 456, 'parent_id' => 1723), 
    array('id' => 1723, 'parent_id' => 0) 
); 

function compare($a, $b) { 

    if ($a['parent_id'] == 0) return -1; 
    if ($b['parent_id'] == 0) return 1; 

    if ($a['id'] == $b['parent_id']) return -1; 
    if ($b['id'] == $a['parent_id']) return 1; 

    return 0; 
} 

usort($arr, 'compare'); 

print_r($arr); 

出力:

Array 
(
    [0] => Array 
     (
      [id] => 1723 
      [parent_id] => 0 
     ) 

    [1] => Array 
     (
      [id] => 456 
      [parent_id] => 1723 
     ) 

    [2] => Array 
     (
      [id] => 1203 
      [parent_id] => 456 
     ) 

) 
関連する問題