Maison > développement back-end > Problème PHP > Partager une méthode de modification de tableau d'arborescence basée sur PHP

Partager une méthode de modification de tableau d'arborescence basée sur PHP

PHPz
Libérer: 2023-04-26 15:39:53
original
519 Les gens l'ont consulté

Dans le développement quotidien, nous rencontrons souvent le besoin de modifier une certaine valeur dans un tableau arborescent. Comment gérer cette situation ? Cet article partagera une méthode de modification de tableau d'arborescence basée sur PHP.

Tout d’abord, nous devons comprendre ce qu’est un tableau arborescent. Une structure arborescente fait référence à une structure de données avec des relations hiérarchiques, dans laquelle chaque nœud peut avoir zéro ou plusieurs nœuds enfants, et il peut également y avoir des relations hiérarchiques entre les nœuds enfants. En PHP, nous pouvons utiliser un tableau à deux dimensions pour représenter une structure arborescente, dans laquelle chaque nœud enfant peut être un tableau avec l'indice « enfants ».

Ce qui suit est un exemple de structure arborescente représentée par un tableau à deux dimensions :

$data = [
    [
        'id' => 1,
        'name' => 'A',
        'children' => [
            [
                'id' => 2,
                'name' => 'B',
                'children' => [
                    [
                        'id' => 3,
                        'name' => 'C',
                        'children' => [
                            [
                                'id' => 4,
                                'name' => 'D',
                                'children' => []
                            ]
                        ]
                    ]
                ]
            ]
        ]
    ]
];
Copier après la connexion

Ensuite, simulons une exigence : changeons le champ de nom du nœud avec l'identifiant 3 en 'E'.

Tout d'abord, nous devons parcourir l'intégralité de l'arborescence, trouver le nœud avec l'identifiant 3 de manière récursive, puis modifier la valeur de son champ de nom. Voici le code implémenté sur la base de cette idée :

function modifyNodeValue(&$data, $id, $fieldName, $newValue)
{
    foreach ($data as &$node) {
        if ($node['id'] == $id) {
            $node[$fieldName] = $newValue;
        }
        if (!empty($node['children'])) {
            modifyNodeValue($node['children'], $id, $fieldName, $newValue);
        }
    }
}
Copier après la connexion

La fonction ci-dessus utilise le passage de références et peut modifier directement le tableau d'origine. Nous transmettons les paramètres id, fieldName et newValue pour spécifier quel champ de quel nœud doit être modifié en quelle valeur. Son implémentation réelle consiste à parcourir chaque nœud du tableau, et lorsque le nœud avec l'identifiant spécifié est trouvé, à modifier la valeur de son champ spécifié.

Il convient de noter ici qu'en raison de la nécessité d'un parcours récursif, cette méthode peut facilement expirer ou dépasser la limite de mémoire lorsque la structure arborescente est relativement grande, elle n'est donc pas adaptée au traitement de très grandes structures arborescentes. Il peut être optimisé en divisant la grande structure arborescente en plusieurs petites structures arborescentes, puis en les modifiant séparément et enfin en les fusionnant.

Maintenant, voyons comment appeler la fonction ci-dessus pour compléter nos exemples d'exigences.

// 修改id为3的节点的name字段为'E'
modifyNodeValue($data, 3, 'name', 'E');
// 输出修改后的树型结构
print_r($data);
Copier après la connexion

Après avoir exécuté le code ci-dessus, vous pouvez obtenir le résultat suivant :

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => A
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => B
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => E
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 4
                                                            [name] => D
                                                            [children] => Array
                                                                (
                                                                )
                                                        )
                                                )
                                        )
                                )
                        )
                )
        )
)
Copier après la connexion

Comme vous pouvez le voir, nous avons réussi à modifier le champ de nom du nœud avec l'identifiant 3 en 'E', tout en conservant la structure de l'arborescence entière. inchangé.

Pour résumer, ce qui précède est une méthode de modification de tableau arborescent basée sur PHP. Dans le développement réel, nous pouvons choisir différentes méthodes d'optimisation en fonction des besoins spécifiques et de la taille des données pour obtenir un traitement plus efficace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal