如何在 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";
显示 text1、text2、... 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 中解析具有动态名称的变量?的主要内容,如果未能解决你的问题,请参考以下文章
在 Kotlin 中使用 Moshi 和 Retrofit 解析具有增量对象名称的 JSON