eval() を使用せずに文字列パス式を使用して入れ子になった配列値にアクセスする方法

Linda Hamilton
リリース: 2024-10-26 03:00:03
オリジナル
420 人が閲覧しました

How to Access Nested Array Values Using String Path Expressions Without 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
                         )
                 )

        )

)
ログイン後にコピー

このタスクは、配列インデックス パスを表す文字列を入力として受け取り、対応する値を返す関数を作成することです。これにより、潜在的に危険な eval() 関数の使用が回避されます。

解決策

この問題を解決する鍵は、インデックス パス文字列を個々の配列キーに分割することにあります。これは、explode() 関数を使用して実現できます。

<code class="php">$pathStr = "0:Data:name";
$paths = explode(":", $pathStr); </code>
ログイン後にコピー

抽出されたキーを使用して、ループを使用して配列を反復的に移動できます。

<code class="php">$itens = $myArray;
foreach($paths as $ndx){
    $itens = $itens[$ndx];
}</code>
ログイン後にコピー

この例では、$itens値「John Smith」が含まれるようになります。

したがって、このタスクを実行する関数は次のようになります:

<code class="php">function getArrayValueByPath($pathStr, $arrayToAccess)
{
    $paths = explode(":", $pathStr); 
    $itens = $arrayToAccess;
    foreach($paths as $ndx){
        $itens = $itens[$ndx];
    }
    return $itens;
}</code>
ログイン後にコピー

以上がeval() を使用せずに文字列パス式を使用して入れ子になった配列値にアクセスする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート