次の多次元配列があるとします。
$fruits['apple']['name'] = 'macintosh';
単一の変数でキーパス全体を参照する方法はありますか?
私はどういうわけか次のことをしたいと思います:
$path = "['apple']['name']";
echo $fruits[$path];
//output would be "macintosh"
次の多次元配列があるとします。
$fruits['apple']['name'] = 'macintosh';
単一の変数でキーパス全体を参照する方法はありますか?
私はどういうわけか次のことをしたいと思います:
$path = "['apple']['name']";
echo $fruits[$path];
//output would be "macintosh"
単一の変数でキーパス全体を参照する方法はありますか?
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'
あなたがしたいことは直接可能ではありません-変数が連鎖されているとあいまいになります。
次のようなアクセサ関数を記述する必要があります。
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);
参照はあなたが必要とするものかもしれません:
$path = &$fruits['apple']['name'];
にアクセスするたびに$path
、 の値$fruits['apple']['name']
が使用 (または変更など) されます。