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 關注
- 174 瀏覽
添加回答
舉報