-3

我有数组$arr=array("a"=>array("b"=>123)) ,我需要像这样处理它:

$a='[a][b]';
echo $arr{$a};

但它不起作用;

echo $arr[a][b];- 工作正常,但这不是我需要的。=(

PHP手册说:

如果您编写 $$a 1,那么解析器需要知道您是否打算使用 $a 1作为变量,或者您是否希望 $$a 作为变量,然后是该变量的1索引。解决这种歧义的语法是: ${$a 1 } 用于第一种情况, ${$a} 1用于第二种情况。>> php手册

但是“回声 ${$a};” 和“回声 $arr{$a};” 并且所有其他变体都没有输出。

更新

简而言之,我需要通过表单删除关联数组的一个元素。例如,我有 $a=array('abc'=>'def'); 和html表单

<form><input name="deleteIT" value="[abc]"></form>

所以,提交后我想从 $a 变量中删除 $deleteIT 值。

4

1 回答 1

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 );
于 2012-09-17T18:46:41.567 回答