0

pathもう少し明確にするために、他の配列からの特定の値を含む配列があります。ここに例を示します。

$params と呼ぶキーを含む配列

Array
(
    [0] => paths
    [1] => assets
    [2] => js
)

そして、これが私の連想配列で、これを $config と呼びます

Array
(
    [paths] => Array
        (
            [assets] => Array
                (
                    [js] => /assets/js
                    [css] => /assets/css
                )

        )

    [library] => Array
        (
            [js] => jQuery
        )

)

では、配列 1 を使用して配列 2 の値にアクセスするにはどうすればよいでしょうか?

試してみ$config[$params[0]][$params[1]][$params[2]]ましたが、まったく効率的ではありません。

4

3 に答える 3

3

あなたが試すことができます

$path = array(
        0 => 'paths',
        1 => 'assets',
        2 => 'js',
);


$data = array(
  'paths' => array(
    'assets' => array(
      'js' => '/assets/js',
      'css' => '/assets/css',
    ),
  ),
  'library' => array(
    'js' => 'jQuery',
  ),
);


$temp = $data;
foreach($path as $key) {
    $temp = $temp[$key];
}

var_dump($temp);

出力

string '/assets/js' (length=10)
于 2012-12-26T10:42:29.343 に答える
2

ループはあなたの問題を解決するはずです:

$c = $config;
foreach($params as $path) {
  if(!array_key_exists($path, $c)) {
    $c = null;
    break;
  }
  $c = $c[$path];
}

これは、すべてのエントリを反復処理してから、配列$paramsのサブキーにアクセスします。$configそれを見つけた後$c、現在の部分配列が含まれます。最後に、$c探していた値が含まれます (NULLパスが無効/見つからない場合)。

関数を使用して、同じことを機能的な方法で行うことができますarray_reduce

$path = array_reduce(function($current, $path) {
  if($current == NULL || !array_key_exists($path, $current))
    return NULL;

  return $current[$path];
}, $params, $config);
于 2012-12-26T10:46:53.283 に答える
1

こんにちはジョナサンここで、最後に中かっこを1つ逃しました。この「$config[$params[0]][$params[1]][$params[2]]」を試してください。それはうまくいきます私にとってはうまくいったコードを投稿しています

<?php
$params = array(0 => 'paths',1 => 'assets',2 => 'js');
echo '<pre>';print_r($params);

$config = array
(
    'paths' => array
        (
            'assets' => array
                (
                    'js' => '/assets/js',
                    'css' => '/assets/css'
                )

        ),

    'library' => array
        (
            'js' => 'jQuery'
        )

);
echo '<pre>';print_r($config);
echo $config[$params[0]][$params[1]][$params[2]];
 ?>
于 2012-12-26T10:46:01.367 に答える