Maison >développement back-end >tutoriel php >Comment puis-je accéder à des valeurs spécifiques dans un tableau complexe en utilisant une chaîne comme chemin d'index sans compter sur eval() pour des raisons de sécurité ?

Comment puis-je accéder à des valeurs spécifiques dans un tableau complexe en utilisant une chaîne comme chemin d'index sans compter sur eval() pour des raisons de sécurité ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 17:15:30875parcourir

How can I access specific values in a complex array using a string as an index path without relying on eval() for security reasons?

Comment accéder aux valeurs d'un tableau en utilisant une chaîne comme chemin d'index

Si vous avez un tableau avec une structure complexe, vous pouvez rencontrer le devez accéder à des valeurs spécifiques à l’aide d’une chaîne représentant le chemin d’accès à cette valeur. L'utilisation de eval() n'est pas recommandée en raison de failles de sécurité potentielles. Au lieu de cela, il est possible de créer une fonction personnalisée capable de gérer cette tâche.

Considérez l'exemple de tableau suivant :

Array
(
    [0] => Array
        (
            [Data] => Array
                (
                    [id] => 1
                    [title] => Manager
                    [name] => John Smith
                )
         )
    [1] => Array
        (
            [Data] => Array
                 (
                     [id] => 1
                     [title] => Clerk
                     [name] =>
                         (
                             [first] => Jane
                             [last] => Smith
                         )
                 )

        )

)

Vous pouvez établir une fonction qui prend une chaîne comme chemin d'index et le tableau auquel accéder en entrée :

function($indexPath, $arrayToAccess)
{
    // $indexPath would be something like [0]['Data']['name'] which would return 
    // "Manager" or it could be [1]['Data']['name']['first'] which would return 
    // "Jane" but the amount of array indexes that will be in the index path can 
    // change, so there might be 3 like the first example, or 4 like the second.

    return $arrayToAccess[$indexPath] // <- obviously won't work
}

Pour implémenter la fonctionnalité souhaitée, vous pouvez exploiter la fonction explosive() :

$paths = explode(":", $indexPath); 
$itens = $myArray;
foreach($paths as $ndx){
    $itens = $itens[$ndx];
}

Dans cet exemple, $pathStr représente l'entrée chemin de chaîne et $myArray est le tableau auquel vous souhaitez accéder. Ce code parcourt les éléments de $paths, qui sont les sous-chaînes séparées par les deux points (:) dans $indexPath, et met à jour $itens avec la valeur à $ndx dans l'itération $itens actuelle.

En tant que Résultat, $itens contiendra la valeur que vous recherchez dans le tableau, en fonction du chemin de chaîne spécifié. Cette méthode est plus sûre et plus flexible que l'utilisation de eval(), car elle n'implique pas l'exécution dynamique de code PHP.

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!

Déclaration:
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