Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

Php 如何使用带组合键的字符串从多维数组中获取值?

Php 如何使用带组合键的字符串从多维数组中获取值?,php,arrays,Php,Arrays,请看下面的代码,我想在这里获得$arr['jimmy']['age']。字符串是jimmy.age,将从ajax发布 <?php $arr=array( 'jimmy'=>array( 'age'=>31 ) ); $str='jimmy.age'; $keys_tree=explode('.',$str); $x=''; foreach($keys_tree as $k=>$v){ $x.='["'.$v.'"]'; } ech

请看下面的代码,我想在这里获得
$arr['jimmy']['age']
。字符串是
jimmy.age
,将从ajax发布

<?php
$arr=array(
    'jimmy'=>array(
        'age'=>31
    )
);

$str='jimmy.age';
$keys_tree=explode('.',$str);
$x='';
foreach($keys_tree as $k=>$v){
    $x.='["'.$v.'"]';
}
echo $arr$x; //error here; how can i get $arr['jimmy']['age'] using $arr joining str ['jimmy']['age']

一种方法是遍历数组并使用引用跟踪每个级别:

$str ='jimmy.age';
$keys_tree = explode('.', $str);

$pointer = $arr;

while($key = array_shift($keys_tree)){

  if(!isset($pointer[$key]))
    throw new Exception(sprintf("Key %s doesn't exist", $key));

  $pointer = &$pointer[$key];      
}

echo $pointer;

请解释一下你认为的
$arr$x
是什么意思。如果在您尝试这样做时,您意识到自己做错了什么,那么删除此问题并没有什么丢脸的。您不能像正在尝试那样做,
$x
包含一个看起来像数组符号的字符串。请尝试以下操作:echo$arr.$x@Rohit,它不会像您所说的那样尝试
$arr.$x
。它会与
eval()
一起工作,但是该函数附加了太多戏剧性的内容