Heim > Fragen und Antworten > Hauptteil
P粉0434701582023-09-04 14:57:41
你比你想象的更接近。只需递归调用你的函数,并将结果添加到最终数组中。
public function flattingTree(array $tree) { $denormalizeTree = []; foreach ($tree as $node) { if (isset($node['nodes'])) { $denormalizeTree += $this->flattingTree($node['nodes']); } $denormalizeTree[$node['id']] = $node['text']; } return $denormalizeTree; }
结果:
$result = $this->flattingTree($array); print_r($result); Array ( [11] => Flowchart [12] => Pseudo code [2] => Algoritma [4] => Java [8] => Yii2 Framework [9] => Laravel [5] => PHP [7] => Javascript [3] => Pemrograman [13] => Mac OS [14] => Linux [10] => Sistem Operasi )
P粉8073979732023-09-04 13:40:19
一个快速的解决方案是使用递归函数遍历数组并将所需数据添加到最终数组中。
关键在于有一个函数接受“未展开”的数组和一个变量来保存数据(数据将保存在该变量中)。最后一个参数将通过引用传递,以便变量本身被改变,从而将数据保存在其中。
function extract($arr, &$saveInto) { foreach ($arr as $el) { isset($el['id'], $el['text']) && ($saveInto[$el['id']] = $el['text']); isset($el['nodes']) && extract($el['nodes'], $saveInto); // 递归调用 } }
使用上述函数,可以通过调用它并指定一个变量来展开数组以保存结果。
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = []; // 将保存结果的数组 extract($unflattenedArr, $finalArr); // 此时 $finalArr 中保存了所需的结果。
为了使事情更简单,可以封装 extract
函数,不再需要准备一个空数组来保存结果。
function flatten($arr) { $r = []; // 此函数准备一个空变量 extract($arr, $r); // 将其传递给“extract”函数 return $r; // 然后返回带有所需结果的变量 }
现在,可以按以下方式展开数组:
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = flatten($unflattenedArr); // 调用封装了“extract”函数的新函数 // 此时 $finalArr 中保存了所需的结果。
希望我已经帮助你进一步了。