如何在PHP中解析具有动态名称的变量?

时间:2013-06-03 05:31:57

标签: php arrays parsing variables

我确实有变量,如

<?php
$num1 = 'txt1';
$num2 = 'txt2';
$num3 = 'txt3';   
...

我确实有循环

for ($i=1; $i<100; $i++){  
   echo 'This is textNr'.$i.':'   .$num.$i  ;
}

我需要生成之类的结果:

这是textNr1:txt1


当然,使用此代码,我会得到之类的内容:

这是textNr1:'undefined'


,因为$ num。$ i中没有定义$ num;

所以$ num。$ i应该被解析一次并成为$ num1然后$ num1应该被解析第二次,如:

 echo 'This is textNr'.$i.':'   .$num1  ;

有人知道如何处理吗?
这个问题的技术术语是“变量变量”或“动态变量”!

6 个答案:

答案 0 :(得分:4)

您应该执行以下操作:

  $nums = array();
  $nums[0] = 'txt1';
  $nums[1] = 'txt2';

  for ($i=0; $i<100; $i++){  
    echo 'This is textNr'.$i.':'   .$nums[$i]  ;
  }

或者,如果要在循环中以1开始,则在数组中将索引设置为1,

答案 1 :(得分:3)

使用数组(Antoine的答案)是更好的做法。但是,如果您想/需要使用您的解决方案

for ($i=1; $i<100; $i++){  
   echo 'This is textNr'.$i.':' . ${"num$i"}  ;
}

PHP首先评估"num$i"并使用该结果查找具有该名称的变量,由于${ }

有关详情,请参阅:PHP-Manual (Variable Variables)

请注意,您可以使用更深层次的变量名称

$a = "b";
$b = "c";
${${$a}}  = 7; 
echo $c; // echoes 7

通过数组:你也可以声明一个数组

$array = ('text1', 'text2', 'text3', ... , 'textN');
echo count ( $array ); // echoes N, size of array

显示项目

// Loop on array
foreach ($array as $text) {
  echo "$text\n";
}

显示 text1 text2 ,... textN (每行一个)

您还可以使用 for 循环

$n = count($array);
for($i=0 ; $i<$n ; $i++) echo $array[$i] . "\n";

产生相同的输出。

答案 2 :(得分:2)

php变量可以使用大括号构造,如下例所示:

echo 'This is textNr'.$i.':'   .${'num'.$i}  . "\r\n" ;

你可以在括号之间放置任何返回者字符串

答案 3 :(得分:1)

你要找的php术语是“变量变量”。 php是支持它的极少数语言之一,并且有充分的理由 - 这种方法闻起来有点不对。

答案 4 :(得分:1)

试试这个:

<?php
$nums = array();
  $nums[0] = 'txt1';
  $nums[1] = 'txt2';

  for ($i=0; $i<count($nums); $i++){  
    echo 'This is textNr'.$i.':'   .$nums[$i]  ;
  }
?>

是您选择的答案的改进版本。它只显示您为数组设置的值。

答案 5 :(得分:0)

您可以使用数组,如下所示:

$nums = array('txt1','txt2','txt3');

for ($i=0; $i<sizeof($nums); $i++){  
    echo 'This is textNr'.$i.':'   .$nums[$i]  ;
}

数组的上限应该是数组的大小,否则你可能会得到$ nums的空值[x]