2

次の多次元配列があるとします。

$fruits['apple']['name'] = 'macintosh';

単一の変数でキーパス全体を参照する方法はありますか?

私はどういうわけか次のことをしたいと思います:

$path = "['apple']['name']";
echo $fruits[$path];

//output would be "macintosh"
4

5 に答える 5

3

単一の変数でキーパス全体を参照する方法はありますか?

1)このように: $fruits[$variable], 答えはノーです, ありません.

もちろん、1 つの $variable を 2 つ以上に分割し、その部分を別々に使用する方法はいくつかあります ( $fruits[$part1][$part2])

これは一般的な解決策です:

function get_path($array, $path)
{
    $value = $array;
    $parts = explode("']['", trim($path, "[']"));
    foreach($parts as $key)
    {
        $value = $value[$key];
    }
    return $value;
}

$fruits['apple']['name'] = 'macintosh';
$path = "['apple']['name']";
echo get_path($fruits, $path);

// output = 'macintosh'

2)指摘したように、「eval」を使用することもできますが、これは推奨されません。

$fruits['apple']['name'] = 'macintosh';
$path = "['apple']['name']";
eval('echo $fruits' . $path . ';');

// output = 'macintosh'

3)最後に、参照変数を使用して配列の要素にアクセスする場合は、次のようにします。

$fruits['apple']['name'] = 'macintosh';
$path &= $fruits['apple']['name'];
echo $path;  // output = 'macintosh'

$path = 'MSX';
echo $fruits['apple']['name'];  // output = 'MSX'
于 2012-06-06T20:28:27.903 に答える
1
于 2012-06-06T20:39:07.530 に答える
0

あなたがしたいことは直接可能ではありません-変数が連鎖されているとあいまいになります。

次のようなアクセサ関数を記述する必要があります。

define('SEPARATOR','|');

function getElement($array,$path) {
  $path=explode(SEPARATOR,$path);
  $out=&$array;
  foreach ($path as $step) {
    if (!isset($out[$step])) return null;
    $out=$out[$step];
  }
  return $out;
}

$path="apple|name";
echo getElement($fruits,$path);
于 2012-06-06T20:32:43.983 に答える
0

参照はあなたが必要とするものかもしれません:

$path = &$fruits['apple']['name'];

にアクセスするたびに$path、 の値$fruits['apple']['name']が使用 (または変更など) されます。

于 2012-06-06T20:30:10.350 に答える