我怎么能在PHP中拥有数组变量的动态名称?

时间:2014-09-12 09:28:42

标签: php

我用过这个,但我的数组显示为空白。

foreach($page_data->result() as $text){ $i++;
echo $name="text".$i; //this line print ok.
$$name=array();
echo $$name['content']=$text->$content; //this line print ok.
print_r($text1);
} print_r($text1);

这里我想将数组动态命名为text1,text2,text3 ....... 但是当我打印$ text1时,它会显示一个空白数组。

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

这只是语法模糊。 $$name['content']被理解为:

${$name['content']}

即。变量的名称应该是$name['content']的值,显然不存在,如果启用错误报告,实际上会导致错误。您可以通过以下方式解决此问题:

${$name}['content'] = $text->$content;

但是,你真的应该通过使用数组而不是变量来解决这个问题:

$texts[] = array('content' => $text->$content);

答案 1 :(得分:-1)

在回显变量内容之前,你需要递增索引,所以如果只有1个结果,它会尝试访问未定义的索引,每次通过时你也会重新初始化名称数组循环,你不应该这样做

Results
------------------
Num     Content
0       I am a text post 

如果这些是返回的结果并且你想指向索引i,那么当你的循环经历时会发生这种情况:

i = 0;
i = 1;
assign values to name array

因为只有一个结果会发生

 Results
------------------
Num     Content
0       I am a text post 
-       -                  <----- i = 1 (null pointer exception?)

这就是为什么数组中没有显示任何值的原因,请尝试将代码更改为:

// Declare i to point at the 0 index
$i = 0;
$name=array();

foreach($page_data->result() as $text){ 
  $name[i]['content']=$text; 
  $i++;
} 

每次循环传递时,您的名称数组都不会将文本内容添加到新索引中,即如果您有2个结果

$name[0]['content'] = "This is a text post";
$name[1]['content'] = "Here is another post";

希望这有帮助。