如何根据“父”索引排列这个数组?

时间:2016-02-19 07:15:31

标签: php

有一个array

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [menu_id] => 131
                    [gmnu_code] => 5
                    [menu_lib] => global.menu.admin.profil
                    [menu_image] => 
                    [menu_ordre] => 1
                    [menu_visible] => 1
                    [menu_deleted] => 
                    [menu_parent] => 1
                    [menu_controlleur] => AdminProfil
                    [menu_navigation] => profil.list.titre
                )

            [1] => Array
                (
                    [menu_id] => 184
                    [gmnu_code] => 5
                    [menu_lib] => global.menu.admin.users
                    [menu_image] => 
                    [menu_ordre] => 2
                    [menu_visible] => 1
                    [menu_deleted] => 
                    [menu_parent] => 1
                    [menu_controlleur] => AdminUsers
                    [menu_navigation] => users.list.titre
                )

            [2] => Array
                (
                    [menu_id] => 130
                    [gmnu_code] => 5
                    [menu_lib] => global.menu.param.societe
                    [menu_image] => 
                    [menu_ordre] => 3
                    [menu_visible] => 1
                    [menu_deleted] => 
                    [menu_parent] => 1
                    [menu_controlleur] => AdminSociete
                    [menu_navigation] => societe.ajout.modif.titre
                )

            [3] => Array
                (
                    [menu_id] => 132
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 131
                    [menu_controlleur] => AdminProfil/ajouter
                    [menu_navigation] => profil.titre.ajout
                )

            [4] => Array
                (
                    [menu_id] => 133
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 131
                    [menu_controlleur] => AdminProfil/modifier
                    [menu_navigation] => profil.titre.modif
                )

            [5] => Array
                (
                    [menu_id] => 134
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 131
                    [menu_controlleur] => AdminProfil/attribuerMenu
                    [menu_navigation] => profil.menu.attribution
                )

            [6] => Array
                (
                    [menu_id] => 147
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 131
                    [menu_controlleur] => AdminProfil/supprimer
                    [menu_navigation] => main.suppr.profil
                )

            [7] => Array
                (
                    [menu_id] => 185
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 184
                    [menu_controlleur] => AdminUsers/ajouter
                    [menu_navigation] => utilisateur.titre.ajout
                )

            [8] => Array
                (
                    [menu_id] => 186
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 184
                    [menu_controlleur] => AdminUsers/modifier
                    [menu_navigation] => utilisateur.titre.modif
                )

            [9] => Array
                (
                    [menu_id] => 187
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 184
                    [menu_controlleur] => AdminUsers/reinitMdp
                    [menu_navigation] => utilisateur.titre.reinit.mdp
                )

            [10] => Array
                (
                    [menu_id] => 188
                    [gmnu_code] => 
                    [menu_lib] => 
                    [menu_image] => 
                    [menu_ordre] => 
                    [menu_visible] => 
                    [menu_deleted] => 
                    [menu_parent] => 184
                    [menu_controlleur] => AdminUsers/supprimer
                    [menu_navigation] => utilisateur.titre.suppr
                )

        )
      ...
}

在此array中,数据中存在父级概念:键“menu_parent”表示array是另一个array的子级;其“menu_id”等于“menu_parent”值的array是父级。

例如,在上面的示例中,具有“menu_id”131的array是具有“menu_id”132,133,134和147的数组的父节点。

我想重新安排array的排序,以便特定“menu_id”的array的所有孩子都放在它之后。怎么做?

1 个答案:

答案 0 :(得分:2)

为避免歧义,假设整个数组具有以下模式:

array [
  subarray_0,
  subarray_1,
  ...
];

那么您需要从其他内容中对每个subarray_N 的内容进行独立排序

如果是这样,你可以像这样工作:

foreach ($array as &$subarray) {
  usort($subarray, function($a, $b) {
    switch (true) {
      case $a['menu_parent'] > $b['menu_parent']: return 1;
      case $a['menu_parent'] < $b['menu_parent']: return -1;
      default: return 0;
  }
}