我有数组$arr=array("a"=>array("b"=>123))
我需要这样做:
$a='[a][b]';
echo $arr{$a};
但它不起作用;
echo $arr[a][b];
- 工作正常,但这不是我需要的。 =(
PHP手册说:
如果你写一个1,那么解析器需要知道你是否想要使用$ a 1作为变量,或者你想要将$$作为变量然后是该变量的1索引。解决此歧义的语法是:第一种情况为$ {$ a 1},第二种情况为$ {$ a} 1。>> php manual
但是“echo $ {$ a};”和“echo $ arr {$ a};”而所有其他变化都没有输出。
更新
简而言之,我需要通过表单删除一个assotiative数组元素。 例如,我有$ a = array('abc'=>'def'); 和html表单
<form><input name="deleteIT" value="[abc]"></form>
因此,提交后我想从$ $删除一个变量$ deleteIT值。
答案 0 :(得分:2)
这是否足够接近你需要的东西?
$a = "a,b";
list( $i, $j ) = explode( ",", $a );
echo $arr[$i][$j];
附录:如果数组$arr
始终只有两个级别,则上述答案将有效。如果它可能有更多(或更少),可以使用以下内容:
function array_get_nested ( $array, $keys ) {
$value = $array;
foreach ( $keys as $index ) {
$value = $value[ $index ];
}
return $value;
}
上面的函数将两个数组作为参数:一个包含我们想要的值,另一个列出我们需要在第一个数组中找到它的键。例如,如果我们有这样的数组:
$arr = array( "a" => array( "b" => array( "c" => 123 ) ) );
然后
echo array_get_nested( $arr, array( "a", "b", "c" ) );
会打印123
。
将字符串键转换为适合array_get_nested()
的第二个参数的数组取决于键的格式,但它可以像使用合适的分隔符调用explode()
一样简单。例如,上面的最后一行代码可以重写为:
$k = "a,b,c";
echo array_get_nested( $arr, explode( ",", $k ) );
要修改嵌套数组,我们可以使用类似的函数:
function array_set_nested ( &$array, $keys, $value ) {
$ref =& $array;
foreach ( $keys as $index ) {
$ref =& $ref[ $index ];
}
$ref = $value;
}
请注意,PHP方便地为我们“自动化”数组,因此我们可以采用先前未定义的变量$foo
并将其转换为三级嵌套数组,只需使用:
array_set_nested( $foo, array( "a", "b", "c" ), 123 );