php中的关联数组变量的变量?

时间:2012-09-17 18:42:35

标签: php arrays

我有数组$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值。

1 个答案:

答案 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 );