PHP-递归添加子类别


PHP - Recursive adding subcategories

虽然这看起来很简单,但我已经为这个案例挣扎了好几天,一直找不到解决方案。我用以下几行解释:

我所拥有的

我有两个数组:一个是类别的顺序,另一个是那些分类值。如下所示:

$orders = 
    [
        {
            category: 3
        },
        {
            category: 8
        }
    ];
$values = 
    {
        3: [
            {
                id: 1,
                value: 'Value 1' 
            },
            {
                id: 2,
                value: 'Value 2'
            },
            {
                id: 3,
                value: 'Value 3'
            }
        ],
        8: [
            {
                id: 6,
                value: 'Value 6' 
            },
            {
                id: 7,
                value: 'Value 7'
            }
        ]
    };

正如您所看到的,有2个类别,但它们可能更多(事实上,多达10个)。

编辑

result和其他变量之间的关系是,正如您所看到的,类别3具有id 1、2和3的值。因此,由于类别3是order数组中的第一个,我需要获取类别3中的每个类别。

因此,作为一个解释样本,类别3.1(以及3.2和3.3)应该包含子类别8.6和8.7。

我需要什么

我需要将它们分为前一个的每一个子类别,并考虑顺序。因此,由于顺序是第一个类别编号3,然后是类别编号8,对于类别3的每个值,必须在类别8的所有值内(依此类推,如果添加更多类别,则下一个类别的每个值都将在类别编号8下)。

所以我需要的是以下结果:

 $result = 
    [
        {
            category: {id: 1}, // Category 3 first value
            subcategories: [
                {
                    category: {id: 6} // Category 8 first value
                },
                {
                    category: {id: 7} // Category 8 second value
                }
            ]
        },
        {
            category: {id: 2}, // Category 3 second value
            subcategories: [
                {
                    category: {id: 6} // Category 8 first value
                },
                {
                    category: {id: 7} // Category 8 second value
                }
            ]
        },
        {
            category: {id: 3}, // Category 3 third value
            subcategories: [
                {
                    category: {id: 6} // Category 8 first value
                },
                {
                    category: {id: 7} // Category 8 second value
                }
            ]
        }
    ]

我尝试过的

我无法写出我尝试过的所有方法,但我似乎找不到合适的解决方案。

我尝试过递归函数(我认为这是实现这一点的正确方法),但我所能得到的只是一个类似的"超过堆栈调用"的错误。

Aclarations

数据源是开放的,因此适合进行更改。然而,我想保持这种方式,因为这种结构会对未来产生影响——尽管如果有必要,它们也可以改变。

我想我明白了!

以下是我正在使用的代码,至少目前是有效的(我可以添加任意数量的orders):

$result = array();
$objtoadd = array();
for($i = sizeof($orders)-1; $i >= 0; $i--){
    $objtoadd[$i] = array();
    $objtoadd[$i]['subcategories'] = array();
    $act_gr = $orders[$i];
    $obj;
    foreach($values[$act_gr->category] as $sub){
        $obj = array();
        $obj['category'] = $sub;
        if(isset($objtoadd[$i+1]) && sizeof($objtoadd[$i+1]['subcategories']) > 0) $obj['subcategories'] = $objtoadd[$i+1]['subcategories'];
        $objtoadd[$i]['subcategories'][] = $obj;
    }
    if($i === 0 && isset($objtoadd[$i]) && isset($objtoadd[$i]['subcategories'])) $result = $objtoadd[$i]['subcategories'];
}
echo json_encode($result);

感谢大家抽出时间回答问题,也感谢大家的耐心!