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

3

我有像变量这样的东西

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

and I do have a loop

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

我需要生成一个类似于以下内容的结果:

这是文本1:txt1


当然,使用此代码我会得到类似于以下内容:

这是文本1:'未定义'


因为在 $num.$i 中 $num 未被定义;

所以 $num.$i 应该被解析一次并且变成 $num1,然后 $num1 应该再次被解析,如下:

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

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


为什么不直接使用数组并循环它呢? - elclanrs
我不明白你在循环内部尝试做什么。 - Lance
@Lance认为使用$num.$i可以在$i=1时获取到$num1 - pinkpanther
他试图使用 $i 循环变量,例如 $num.$i == $num1 等等。但这是错误的做法... - elclanrs
噢,我明白了。好的,首先在循环内部定义 $num。 - Lance
谢谢,我明白了,我会使用数组。 - AddingColor
6个回答

4

您应该这样做:

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

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

如果你想在循环中从1开始,可以在数组中将索引从1开始。


数组似乎是这里的魔法。谢谢,这应该可以工作。我对PHP还很陌生,但我猜数组经常非常方便。 - AddingColor

3

使用数组(安托万的回答)是更好的做法。但是如果你想/需要使用你的解决方案

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

PHP首先评估"num$i",然后使用${ }定位该名称的变量,关于此更多信息,请参见:PHP手册(变量变量)

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

$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";
}

显示 文本1, 文本2, ... 文本N(每行一个)

您还可以使用 for 循环。

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

生产相同输出的程序。

2

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

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

您可以在括号中放置任何返回字符串的内容


1
尝试这个:

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

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

这是您选择的答案的改进版本。它仅显示您已设置到数组中的值。


1
你所寻找的 PHP 术语是“可变变量”。PHP 是为数不多支持此功能的语言之一,而且有很好的原因——这种方法看起来不对。

0
你可以使用数组,像这样:
$nums = array('txt1','txt2','txt3');

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

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


感谢 **sizeof($nums)**,这非常方便,我从 JavaScript 中知道它作为数组长度。 - AddingColor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接