根据数组键创建动态命名的变量

时间:2011-08-02 22:05:07

标签: php arrays

我有一个多维数组,我想根据键创建新的变量。

我已编写此代码,但它返回NULL

$a = array("test" => array("a", "b", "c"));
foreach($a as $key => $value){
    if(is_array($value)){
        $i = 0;
        foreach($value as $v){
            $i++;
            $$key[$i] = $v;
        }
    }
}
var_dump($test);
?>

问题出在哪里?

3 个答案:

答案 0 :(得分:7)

制作:

${$key}[$i] = $v;
  • $$key[$i]表示“名称为$key[$i]”的变量。
  • ${$key}[$i]表示“名称为$i”的变量中的“$key位置。”

此外,如果您可以初始化$test数组会很好,所以您不会收到通知。在第二个foreach之前添加以下内容:

$$key = array();

答案 1 :(得分:3)

+1 @ Radu的答案,但您也应该考虑这些解决方案是否适合您:

$a = array("test" => array("a", "b", "c"));
foreach($a as $key => $value){
    if(is_array($value)){
      $$key = array_values($value);
    }
}
var_dump($test);

或者:

$a = array("test" => array("a", "b", "c"));
extract($a);
var_dump($test);

请参阅:array_values()extract()

答案 2 :(得分:1)

$$key[$i]尝试获取名称与$key[$i]值匹配的变量。您可以先获得对$$键的引用,然后将一个项添加到该引用:

$a = array("test" => array("a", "b", "c"));
foreach($a as $key => $value){
    if(is_array($value)){
        $i = 0;
        foreach($value as $v){
            $i++;
            $x = & $$key;
            $x[$i] = $v;
        }
    }
}
var_dump($test);
?>

[编辑]

但是我知道,我在测试和写答案方面有点慢,因为几分钟之前已经发布了另一个好答案。仍然保持这一点,因为它使用了一种不同的,而不是更复杂的方法。