PHP变量数组键列表
我有一个多维数组,它可以工作:PHP变量数组键列表,php,variables,multidimensional-array,key,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 pro
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,2)
,而不是[1][2]
,则会更好:您可以避免(脆弱的)预匹配\u all
解析
如果您传递的是
数组(1,2)
,而不是[1][2]
,那就更好了:您可以避免(脆弱的)preg\u match\u all
解析。祝贺您。你刚刚创造了我的新个人记录,因为我在这本书上看到的想法/代码根本不符合要求。“变量很好,但让我们看看我们能把它们带到什么程度……”祝贺你。你刚刚创造了我的新个人记录,因为我在这本书上看到的想法/代码根本不符合要求。“变量很整洁,但让我们看看我们能把它们带到什么程度……”我喜欢这种方法,因为它优雅而安全。我不会称之为“优雅”,但至少它是安全的;)我喜欢这种方法,因为它既优雅又安全。好吧,我不会称之为“优雅”,但至少它是安全的;)
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'