在设置子-父实体之后递归地对多维数组进行排序


Sort multidimensional arrays recursively after setting up child-parent realtions

我有一个这样的数据库结构:

ID   name         sort   parent
1    item1        1      0
2    subitem1     2      1
3    subsubitem1  1      2
4    subitem2     1      1

我将数据库写入阵列

array (size=4)
  0 => 
    array (size=4)
      'id' => string '1' (length=1)
      'name' => string 'item1' (length=5)
      'parent' => string '0' (length=1)
      'sort' => string '1' (length=1)
  1 => 
    array (size=4)
      'id' => string '2' (length=1)
      'name' => string 'subitem1' (length=8)
      'parent' => string '1' (length=1)
      'sort' => string '2' (length=1)
  2 => 
    array (size=4)
      'id' => string '3' (length=1)
      'name' => string 'subsubitem1' (length=11)
      'parent' => string '2' (length=1)
      'sort' => string '1' (length=1)
  3 => 
    array (size=4)
      'id' => string '4' (length=1)
      'name' => string 'subitem2' (length=8)
      'parent' => string '1' (length=1)
      'sort' => string '1' (length=1)

并通过以下函数重组该数组以建立父子关系:

function generateNavArray($arr, $parent = 0)
{
    $items = Array();
    foreach($arr as $item)
    {
        if($item['parent'] == $parent)
        {
            $item['child'] = isset($item['child']) ? $item['child'] : GenerateNavArray($arr, $item['id']);
            $items[] = $item;
        }
    }
    return $items;
}

生成的阵列看起来像这个

array (size=1)
  0 => 
    array (size=5)
      'id' => string '1' (length=1)
      'name' => string 'item1' (length=5)
      'parent' => string '0' (length=1)
      'sort' => string '1' (length=1)
      'child' => 
        array (size=2)
          0 => 
            array (size=5)
              'id' => string '2' (length=1)
              'name' => string 'subitem' (length=4)
              'parent' => string '1' (length=1)
              'sort' => string '2' (length=1)
              'child' => 
                array (size=1)
                  0 => 
                    array (size=5)
                      'id' => string '3' (length=1)
                      'name' => string 'subsubitem1' (length=11)
                      'parent' => string '2' (length=1)
                      'sort' => string '1' (length=1)
                      'child' => 
                        array (size=0)
                          empty
          1 => 
            array (size=5)
              'id' => string '3' (length=1)
              'name' => string 'subitem2' (length=8)
              'parent' => string '1' (length=1)
              'sort' => string '1' (length=1)
              'child' => 
                array (size=0)
                  empty

现在,我需要根据排序值对数组的每个维度进行排序(我的"真实数组"的子数组比这个多)。我试过多运动,但似乎找不到解决办法有什么想法吗?

在构建多维数组之前,当数组为一维时对其进行排序。如果您正在使用一个查询,最好在那里进行排序。按父级排序,然后排序。当您构建多维数组时,每个子级都将附加到父级。如果它们已经按正确的顺序排列,那么它们最终将按相同的顺序排列。