我有一个多维数组,其中有效:
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}} );
谢谢, 克里斯
答案 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
解析。