在设置子父实例后递归排序多维数组

时间:2016-04-28 15:46:42

标签: php arrays sorting

我有这样的数据库结构:

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

现在我需要按排序值对数组的每个维度进行排序,(我的“真实数组”有更多的子阵列然后这个)。 我玩多种类,但似乎无法找到解决方案 任何想法?

1 个答案:

答案 0 :(得分:1)

在构建多维数组之前,在数组为1维时对数组进行排序。如果您使用查询更好,请在那里进行排序。按父级排序然后排序。构建多维数组时,每个子项都将附加到父项。如果它们的顺序正确,它们将以相同的顺序结束。