虽然这看起来很简单,但我已经为这个案例挣扎了好几天,一直找不到解决方案。我用以下几行解释:
我所拥有的
我有两个数组:一个是类别的顺序,另一个是那些分类值。如下所示:
$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);
感谢大家抽出时间回答问题,也感谢大家的耐心!