1

多次元配列またはディクショナリを指定し$arrayます。

そして、それを仮定して$array['foo']['bar']['baz'] = 'something';

多次元インデックスを使用するための eval ステートメント以外の方法はありますfoo/bar/bazか? (使用例は、インデックスを動的に作成する場合です。つまり、関数は /foo/bar/baz/ が何であるかを知りません)。

これを行う唯一の方法は次のとおりです。

$item = testGetIndex($array, "'foo']['bar']['baz'");

function testGetIndex($array, $index) {
  eval('$item = $array[' . $index . '];');
  return $item;
}

:この配列を検索したくないことに言及する必要があります。これは奇妙な使用例です。私は非常に大きな多次元配列を渡されています..

$array[foo][bar]..[baz]配列に変更を加えます。

4

3 に答える 3

2

ここで私の答えを露骨に再利用します:

function recurseKeys(array $keys,array $array){
    $key = array_shift($keys);
    if(!isset($array[$key])) return null;
    return empty($keys) ?
        $array[$key]:
        recurseKeys($keys,$array[$key];
}
$values = recurseKeys(explode('/','foo/bar/baz'),$yourArray);

編集:ジャックが指摘したように、再帰は必要ありません:

function findByKey(array $keys,array $array){
    while(!is_null($key = array_shift($keys))){
        if(!isset($array[$key])) return null;
        $array = $array[$key];
    }
    return $array;
}
$values = findByKey(explode('/','foo/bar/baz'),$yourArray);
于 2013-04-25T18:51:20.027 に答える