3

我确实有变量

<?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  ;

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

4

6 回答 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 开始,

于 2013-06-03T05:35:29.703 回答
3

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

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

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

您也可以使用for循环

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

产生相同的输出。

于 2013-06-03T05:39:25.213 回答
2

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

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

您可以将任何返回字符串的内容放在括号之间

于 2013-06-03T05:37:52.433 回答
1

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

于 2013-06-03T05:44:12.857 回答
1

尝试这个:

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

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

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

于 2013-06-03T05:56:40.777 回答
0

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

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

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

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

于 2013-06-03T05:53:34.510 回答