1 回答
TA贡献1951条经验 获得超3个赞
遗憾的是您没有解释它的用途,但这是Stack Overflow问题的一个常见问题。问题的本质通常是缺失的,因此它成为抽象的练习。
例如,我看不到以这种特定方式重新排列数组的意义。我认为生成的数组可以更有效地使用数组键。还有很多重复信息。
但这就是我们得到的,因此无需我进一步抱怨,这是我想出的代码:
function rearrangeItems($flatItems, $groups)
{
$groupedItems = [];
$groupName = array_shift($groups);
$groupValues = array_unique(array_column($flatItems, $groupName));
foreach ($groupValues as $groupValue) {
$children = [];
foreach ($flatItems as $flatItem) {
if ($flatItem[$groupName] == $groupValue) {
$children[] = $flatItem;
}
}
if (count($groups) > 0) {
$children = rearrange($children, $groups);
$groupKey = "children";
}
else {
$groupKey = "data";
}
$groupedItems[] = ["fieldName" => $groupName,
"value" => $groupValue,
$groupKey => $children];
}
return $groupedItems;
}
是的,这就是所需要的。结果相同。
此函数是递归的,它进行分组的一个级别,然后将结果移交给下一个级别,直到没有更多级别为止。复杂的位是:
array_unique(array_column($flatItems, $groupName))
它返回当前分组级别的所有不同值。
这不是绝对最有效的算法,但可以理解。如果我试图使其更高效,那么可读性可能会受到影响,这绝不是一件好事。
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报