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

Posted

技术标签:

【中文标题】如何在 PHP 中解析具有动态名称的变量?【英文标题】:How to parse a variable having a dynamic name in PHP? 【发布时间】:2013-05-29 05:41:00 【问题描述】:

我确实有变量

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

我确实有一个循环

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

我需要产生一个结果like:

这是 textNr1: txt1


当然,有了这段代码,我会得到类似的东西:

这是 textNr1: 'undefined'


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

所以 $num.$i 应该被解析一次并变成 $num1 然后 $num1 应该被解析第二次:

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

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

【问题讨论】:

为什么不直接使用数组然后循环呢? 我不明白你在循环中要做什么。 @Lance 他认为使用$num.$i 可以得到$num1 if $i=1 他试图用$i 循环变量,比如$num.$i == $num1 等。但这是错误的方法...... 哦。我知道了。好吧,对于初学者来说,在循环中定义 $num。 【参考方案1】:

你应该这样做:

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

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

或者在数组中从1开始索引,如果你想在循环中从1开始,

【讨论】:

数组似乎是这里的魔力。 Thx,这应该工作。我对 PHP 很陌生,但我猜数组通常很方便。【参考方案2】:

使用数组(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";

显示 text1text2、... textN(每行一个)

你也可以使用 for 循环

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

产生相同的输出。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

试试这个:

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

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

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

【讨论】:

【参考方案6】:

你可以像这样使用数组:

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

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

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

【讨论】:

thx for the sizeof($nums) 这很方便,从 javascript 中知道这是 array.length

以上是关于如何在 PHP 中解析具有动态名称的变量?的主要内容,如果未能解决你的问题,请参考以下文章

vba - 使用具有“动态创建名称”的变量

如何在 shell 脚本中动态生成新的变量名?

在 Kotlin 中使用 Moshi 和 Retrofit 解析具有增量对象名称的 JSON

通过 AJAX 提交多个具有相同名称的 HTML 表单 [重复]

解析PHP中的内存管理,PHP动态分配和释放内存

在 PHP 中获取联系表 7 表单 ID