Rumah > Soal Jawab > teks badan
P粉0434701582023-09-04 14:57:41
Anda lebih dekat daripada yang anda sangka. Hanya panggil fungsi anda secara rekursif dan tambahkan hasilnya pada tatasusunan akhir.
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; }
Hasil:
$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
Penyelesaian pantas ialah menggunakan fungsi rekursif untuk melelar melalui tatasusunan dan menambah data yang diperlukan pada tatasusunan akhir.
Kuncinya ialah mempunyai fungsi yang menerima tatasusunan "tidak dikembangkan" dan pembolehubah untuk menyimpan data (data akan disimpan dalam pembolehubah itu). Argumen terakhir akan diluluskan dengan rujukan supaya pembolehubah itu sendiri bermutasi untuk menyimpan data di dalamnya.
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); // 递归调用 } }
Menggunakan fungsi di atas, anda boleh mengembangkan tatasusunan dengan memanggilnya dan menentukan pembolehubah untuk menyimpan hasilnya.
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = []; // 将保存结果的数组 extract($unflattenedArr, $finalArr); // 此时 $finalArr 中保存了所需的结果。
Untuk menjadikan perkara lebih mudah, anda boleh merangkum fungsi extract
dan tidak perlu lagi menyediakan tatasusunan kosong untuk menyimpan hasilnya.
function flatten($arr) { $r = []; // 此函数准备一个空变量 extract($arr, $r); // 将其传递给“extract”函数 return $r; // 然后返回带有所需结果的变量 }
Kini, tatasusunan boleh dikembangkan seperti berikut:
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = flatten($unflattenedArr); // 调用封装了“extract”函数的新函数 // 此时 $finalArr 中保存了所需的结果。
Semoga saya telah membantu anda lebih jauh.