我有一个多维数组,我想根据键创建新的变量。
我已编写此代码,但它返回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);
?>
问题出在哪里?
答案 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);
?>
[编辑]
但是我知道,我在测试和写答案方面有点慢,因为几分钟之前已经发布了另一个好答案。仍然保持这一点,因为它使用了一种不同的,而不是更复杂的方法。