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
Libérer: 2024-10-26 17:15:30
original
784 Les gens l'ont consulté

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
                         )
                 )

        )

)
Copier après la connexion

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
}
Copier après la connexion

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];
}
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!