1

パスまたはパス要素の配列を使用して、多次元配列内の項目を参照する方法はありますか? 例えば。

$multi = array
(
    'array_1' => array
    (
        'array_2' => array
        (
            'option_1' => 'value_1',
            'option_2' => 'value_2',
        )
    )
);

$path = array('level_1', 'level_2', 'option_1');
$result = $multi[$path];

$result = 'value_1' はありますか?

その理由は、$multi を検索して必要なキーを見つけ、$path を返すための再帰関数があるからです。私は自分のコードからパスをハードコーディングできることを知っていますが、これを再利用可能にして $multi を編集し、関数がまだ機能するようにしています。

4

1 に答える 1

4

これを行うためにPHPに組み込まれているものは何もありませんが、移動参照を使用して関数を書くことができます:

/**
 * @param string $path path in the form 'item_1.item_2.[...].item_n'
 * @param array $array original array
 */
function &get_from_array($path, &$array)
{
    $current =& $array;
    foreach(explode('.', $path) as $key) {
        $current =& $current[$key];
    }
    return $current;
}

例:

// get element:
$result = get_from_array('level_1.level_2.option_1', $multi);
echo $result; // --> value_1

$result = 'changed option';
echo $multi['level_1']['level_2']['option_1']; // --> changed_option

名前を構成ファイルから配列に変換するために書きました。例のようにパス自体を配列として渡したい場合は、爆発を省略してください。

于 2013-02-10T15:02:59.720 に答える