第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

針對大型數(shù)據(jù)集按數(shù)組將分組優(yōu)化為嵌套結(jié)構(gòu)

針對大型數(shù)據(jù)集按數(shù)組將分組優(yōu)化為嵌套結(jié)構(gòu)

PHP
慕的地6264312 2021-05-06 18:26:54
給出了帶有字段(狀態(tài),類型等)的“平面”數(shù)組,這些字段可以是動態(tài)的(或多或少的鍵/值對),例如:$data = array(    array(        "status" => "new",        "type" => "type1",        "source" => "source1",        "other" => "other1",        "count" => "1",    ),    ...目的是通過不同數(shù)量的分組字段來獲得多維/嵌套數(shù)組“分組”。例如,如果需要按4個字段分組:$groups = array("status", "type", "source", "other");如果沒有子代,則“數(shù)據(jù)”鍵應(yīng)具有所有“原始”數(shù)據(jù);如果有子代,則將字段和值分組,如演示和此圖中所示 產(chǎn)生的數(shù)據(jù)集應(yīng)如下所示:Array(    [0] => Array        (            [fieldName] => status            [value] => new            [children] => Array                (                    [0] => Array                        (                            [fieldName] => type                            [value] => type1                            [children] => Array                                (                                    [0] => Array                                        (                                            [fieldName] => source                                            [value] => source1                                            [children] => Array                                                (                                                    [0] => Array                                                        (                                                            [fieldName] => other                                                            [value] => other1                                                            [data] => Array                                                                (                                                                    [0] => Array我將解決方案從(將php數(shù)組重新排列為嵌套的層次結(jié)構(gòu)數(shù)組)改編而成,但是它很凌亂,并且占用大量內(nèi)存和時間。是否可以針對大型數(shù)據(jù)集(10000個及更多“平面”數(shù)組記錄)進行優(yōu)化,提高性能并美化代碼?這將用于計算每個組的小計(總和,計數(shù),平均值等)。演示版
查看完整描述

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)前分組級別的所有不同值。


這不是絕對最有效的算法,但可以理解。如果我試圖使其更高效,那么可讀性可能會受到影響,這絕不是一件好事。


查看完整回答
反對 回復(fù) 2021-05-28
  • 1 回答
  • 0 關(guān)注
  • 162 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號