1 回答

TA貢獻(xiàn)1951條經(jīng)驗 獲得超3個贊
遺憾的是您沒有解釋它的用途,但這是Stack Overflow問題的一個常見問題。問題的本質(zhì)通常是缺失的,因此它成為抽象的練習(xí)。
例如,我看不到以這種特定方式重新排列數(shù)組的意義。我認(rèn)為生成的數(shù)組可以更有效地使用數(shù)組鍵。還有很多重復(fù)信息。
但這就是我們得到的,因此無需我進一步抱怨,這是我想出的代碼:
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;
}
是的,這就是所需要的。結(jié)果相同。
此函數(shù)是遞歸的,它進行分組的一個級別,然后將結(jié)果移交給下一個級別,直到?jīng)]有更多級別為止。復(fù)雜的位是:
array_unique(array_column($flatItems, $groupName))
它返回當(dāng)前分組級別的所有不同值。
這不是絕對最有效的算法,但可以理解。如果我試圖使其更高效,那么可讀性可能會受到影響,這絕不是一件好事。
- 1 回答
- 0 關(guān)注
- 162 瀏覽
添加回答
舉報