プログラミングでは、多くの場合、フレキシブル パスを使用してネストされた配列値にアクセスする必要があります。次のような配列構造を考えてみましょう。
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 サイトの他の関連記事を参照してください。