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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從嵌套數(shù)組中刪除無子元素(葉子除外)

從嵌套數(shù)組中刪除無子元素(葉子除外)

PHP
慕桂英3389331 2021-11-05 10:42:59
我有一個(gè)稱為表mappings有id,leaf,parent_id,name和flip_parent列。parent_id和flip_parent都是引用 的整數(shù)mapping。id柱子。flip_parent持有一個(gè)應(yīng)該從樹中排除的值的 id。為此,我有以下函數(shù)($mappings都是mappings表中的所有行,flipParentIds都是同一個(gè)表中的flip_parent值不是null)private function removeFlipParents(array $mappings, array $flipParentIds){    foreach ($mappings as $key => $mapping) {        foreach ($flipParentIds as $id) {            if ($mapping['id'] === $id['flipParent']) {                unset($mappings[$key]);            }        }    }    return $mappings;}刪除這些值后,我需要用剩余的數(shù)據(jù)構(gòu)建一棵樹(樹有 5/6 層深),這是通過以下代碼完成的;private function buildTree(array $elements, $parentId){    $branch = [];    foreach ($elements as $element) {       if ($element['parentId'] == $parentId) {            $children = $this->buildTree($elements, $element['id']);            if ($children) {                $element['children'] = $children;            } else {                $element['children'] = [];            }        }    }    return $branch;}在這種情況下elements與 相同的數(shù)組$mappings,但沒有那些翻轉(zhuǎn)父母。此函數(shù)的結(jié)果作為 JSON 響應(yīng)返回,并由 Javascript 處理以構(gòu)建樹。返回的 JSON 結(jié)構(gòu)與此類似;[{    "id": 1, "name": "Node 1", "children": [{      "id": 2, "name": "Node 1.1", "children": [{        "id": 4, "name": "Node 1.1.1", "leaf": true, "children": [], "gls": [{          "id": 1000, "name": "GL1", "code": "0100"        }, {          "id": 1001, "name": "GL2", "code": "0200"        }]      }, {        "id": 5, "name": "Node 1.1.2", "leaf": true, "children": [], "gls": [{          "id": 2000, "name": "GL3", "code": "0300"        }, {          "id": 2001, "name": "GL4", "code": "0400"        }]      }]    }, {      "id": 3, "name": "Node 1.2", "children": [{        "id": 6, "name": "Node 1.2.1", "leaf": true, "children": [], "gls": [{          "id": 3000, "name": "GL5", "code": "0500"        }, {          "id": 3001, "name": "GL6", "code": "0600"        }]      }]    }]  }, 
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

您將在$node['children']此行中傳遞數(shù)組的副本$this->removeChildlessBranches($node['children']);(如果您在查找通過引用和通過值傳遞之前還沒有聽說過它)。因此,將對(duì)該副本進(jìn)行任何后續(xù)更改,而不是對(duì)原始數(shù)組(也是副本)進(jìn)行更改。更改的結(jié)果然后被丟棄,因?yàn)槟鷽]有對(duì)它們做任何事情。


您可以通過將行更改為 this 來解決該問題$nodes[$key]['children'] = $this->removeChildlessBranches($node['children']);。


但是請(qǐng)注意,您現(xiàn)在可能有一個(gè)沒有子節(jié)點(diǎn)且不是葉節(jié)點(diǎn)的節(jié)點(diǎn),但由于您已經(jīng)在該級(jí)別進(jìn)行了修剪,因此不會(huì)被正確刪除。首先修剪孩子然后取消設(shè)置應(yīng)該會(huì)給你想要的結(jié)果:


private function removeChildlessBranches(array $nodes)

{

    foreach ($nodes as $key => $node) {

        $nodes[$key]['children'] = $this->removeChildlessBranches($node['children']);


        if (empty($nodes[$key]['children']) && !$nodes[$key]['leaf']) {

            unset($nodes[$key]);

        }

    }


    return $nodes;

}


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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