Maison > Questions et réponses > le corps du texte
P粉0434701582023-09-04 14:57:41
Vous êtes plus proche que vous ne le pensez. Appelez simplement votre fonction de manière récursive et ajoutez les résultats au tableau final.
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; }
Résultat :
$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
Une solution rapide consiste à utiliser une fonction récursive pour parcourir le tableau et ajouter les données requises au tableau final.
La clé est d'avoir une fonction qui accepte un tableau "non étendu" et une variable pour contenir les données (les données seront conservées dans cette variable). Le dernier argument sera passé par référence afin que la variable elle-même soit mutée pour contenir les données.
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); // 递归调用 } }
À l'aide de la fonction ci-dessus, vous pouvez développer le tableau en l'appelant et en spécifiant une variable pour enregistrer le résultat.
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = []; // 将保存结果的数组 extract($unflattenedArr, $finalArr); // 此时 $finalArr 中保存了所需的结果。
Pour simplifier les choses, vous pouvez encapsuler la fonction extract
et vous n'avez plus besoin de préparer un tableau vide pour enregistrer le résultat.
function flatten($arr) { $r = []; // 此函数准备一个空变量 extract($arr, $r); // 将其传递给“extract”函数 return $r; // 然后返回带有所需结果的变量 }
Maintenant, les tableaux peuvent être étendus comme suit :
$unflattenedArr = [ ... ]; // 要展开的数组 $finalArr = flatten($unflattenedArr); // 调用封装了“extract”函数的新函数 // 此时 $finalArr 中保存了所需的结果。
J'espère vous avoir aidé davantage.