从嵌套数据结构的平面数组中获取所有子项

时间:2015-12-11 18:03:29

标签: php arrays tree

我有一系列类别。所有类别都有ID,Parent_id和Name。

根类别的Parent_id等于null。他们有子类别可能将他们作为他们的父母,他们可能是亚子类别,子类别作为父母。 (他们可能会有很多级别)。 我可以通过一个查询将所有类别都放到一个平面数组中。我需要的是 - 如果我采用一个类别(或子类别),我如何获得此类别中包含的所有嵌套类别(子类别,子类别)的列表?堆积了这个问题:(

Array看起来像这样:

Array
(
[0] => Array
    (
        [pk_i_id] => 2
        [fk_i_parent_id] => 
        [i_expiration_days] => 30
        [i_position] => 0
        [b_enabled] => 1
        [b_price_enabled] => 1
        [s_icon] => 
    )

[1] => Array
    (
        [pk_i_id] => 4
        [fk_i_parent_id] => 
        [i_expiration_days] => 30
        [i_position] => 6
        [b_enabled] => 1
        [b_price_enabled] => 1
        [s_icon] => 
    )

[2] => Array
    (
        [pk_i_id] => 12
        [fk_i_parent_id] => 
        [i_expiration_days] => 60
        [i_position] => 11
        [b_enabled] => 1
        [b_price_enabled] => 1
        [s_icon] => 
    )

[3] => Array
    (
        [pk_i_id] => 13
        [fk_i_parent_id] => 108
        [i_expiration_days] => 30
        [i_position] => 0
        [b_enabled] => 1
        [b_price_enabled] => 1
        [s_icon] => 
    )

1 个答案:

答案 0 :(得分:0)

您可以使用递归。它看起来像这样:

foreach (var accrualBank in employeeAccruals)
{
    var takeHours = Math.Min(requestedHours, accrualBank.AllowedHours - accrualBank.TakenHours);
    accrualBank.TakenHours += takeHours;
    requestedHours -= takeHours;
    if (requestedHours == 0) break;
}