Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP变量数组键列表_Php_Variables_Multidimensional Array_Key - Fatal编程技术网

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'