PHP变量变量数组键列表

时间:2011-01-30 12:41:38

标签: php variables multidimensional-array key

我有一个多维数组,其中有效:

print_r( $temp[1][0] );

我如何才能完成这项工作......我将键列表作为字符串,如下所示:

$keys = "[1][0]";

我想使用字符串键列表访问数组,怎么做? 这有效,但键显然是硬编码的:

$keys = "[1][0]";
$tempName = 'temp';

print_r( ${$tempName}[1][0] );

// tried lots of variations like, but they all produce errors or don't access the array
print_r( ${$tempName.${$keys}} );

谢谢, 克里斯

1 个答案:

答案 0 :(得分:4)

function accessArray(array $array, $keys) {
    if (!preg_match_all('~\[([^\]]+)\]~', $keys, $matches, PREG_PATTERN_ORDER)) {
        throw new InvalidArgumentException;
    }

    $keys = $matches[1];
    $current = $array;
    foreach ($keys as $key) {
        $current = $current[$key];
    }

    return $current;
}

echo accessArray(
    array(
        1 => array(
            2 => 'foo'
        )
    ),
    '[1][2]'
); // echos 'foo'

如果你传入array(1, 2)而不是[1][2],那就更好了:可以避免(脆弱的)preg_match_all解析。