ホームページ >バックエンド開発 >PHPチュートリアル >セキュリティ上の理由から eval() に依存せずに、インデックス パスとして文字列を使用して、複雑な配列内の特定の値にアクセスするにはどうすればよいですか?

セキュリティ上の理由から eval() に依存せずに、インデックス パスとして文字列を使用して、複雑な配列内の特定の値にアクセスするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 17:15:30876ブラウズ

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

文字列をインデックス パスとして使用して配列値にアクセスする方法

複雑な構造の配列がある場合、値へのパスを表す文字列を使用して、特定の値にアクセスする必要があります。潜在的なセキュリティ上の脆弱性があるため、 eval() の使用はお勧めできません。代わりに、このタスクを処理できるカスタマイズされた関数を作成することができます。

次の配列の例を考えてみましょう。

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

        )

)

文字列をインデックス パスとして受け取る関数を確立でき、入力としてアクセスされる配列:

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
}

必要な機能を実装するには、explode() 関数を活用できます:

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

この例では、$pathStr は入力を表します文字列パス、$myArray はアクセスする配列です。このコードは、$indexPath 内のコロン (:) で区切られた部分文字列である $paths の要素を反復処理し、現在の $itens 反復の $ndx の値で $itens を更新します。

As aその結果、$itens には、指定された文字列パスに基づいて、配列から探している値が含まれます。この方法は、PHP コードを動的に実行する必要がないため、eval() を使用するよりも安全で柔軟です。

以上がセキュリティ上の理由から eval() に依存せずに、インデックス パスとして文字列を使用して、複雑な配列内の特定の値にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。