私はこの種の配列を持っています:
array(2) {
[1] => array(3) {
  [3] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "3"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
  [4] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "4"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
  [2] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(1) "2"
      ["depth"] => string(1) "1"
      ["parent_id"] => NULL
    }
  }
}
[2] => &array(3) {
  [15] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "15"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "3"
    }
  }
  [16] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "16"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "2"
    }
  }
  [18] => array(3) {
    ["data"] => array(3) {
      ["id"] => string(2) "18"
      ["depth"] => string(1) "2"
      ["parent_id"] => string(1) "4"
    }
  }
}
}
最初のレベルは深さを意味します(1には子がない、2には子のない親がある、など)。配列項目の順序は正しいです。同じ順序で(もちろんレベルに応じて)異なる配列を取得する必要があります。
array(6) {
[3] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "3"
    ["depth"] => string(1) "1"
    ["parent_id"] => NULL
  }
}
[15] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "15"
    ["depth"] => string(1) "1"
    ["parent_id"] => 3
  }
}
[4] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(1) "4"
    ["depth"] => string(1) "1"
    ["parent_id"] => NULL
  }
}
[18] => &array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "18"
    ["depth"] => string(1) "2"
    ["parent_id"] => string(1) "4"
  }
}
[2] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "2"
    ["depth"] => string(1) "2"
    ["parent_id"] => NULL
  }
}
[16] => array(3) {
  ["data"] => array(3) {
    ["id"] => string(2) "16"
    ["depth"] => string(1) "2"
    ["parent_id"] => string(1) "2"
  }
}
}