【问题标题】:Foreach loop, with tons of varsForeach 循环,有大量的变量
【发布时间】:2019-04-15 17:48:19
【问题描述】:

我在数据库中有一堆文本,由“grp”标识我如何将每个文本绑定到“示例:

if($grp->$grp === '1') {
---> $text+$grp->$grp <--- = $grp->text
}

是否可以进行 foreach 和 while 循环,将文本绑定到每个“text1、text2 等”?

我试过这种方法

foreach ($getgrouptxt as $grp) {
 $grpnr = $grp->grp;
  while ($grpnr < '63') {
   $text+$grpnr = $grp->text;}
}
}

所以基本上 从数组中获取文本,使用 foreach 循环遍历它们

我希望它将文本变量 ($text"number") 设置为 $grp-text,每次碰到一个数字,直到达到 62

【问题讨论】:

  • 有什么理由需要动态命名的变量(即$test$grpnr)而不是数组(在大多数情况下这是正确的表示形式)($test[$grpnr])?
  • 不,不是。你会建议我怎么做?

标签: php


【解决方案1】:

+ 用于数字加法

您打算将数字附加到字符串,但您使用的是数字加法运算符 (+) 而不是字符串连接运算符 (.)。所以,你需要$text.$grpnr 而不是$text+$grpnr

如果要赋值,保存它的变量在赋值的左侧

如果要将$text.$grpnr存储到$grp-&gt;text中,则需要反转赋值:

$grp->text = $text.$grpnr;

如果要使用动态变量名,请在其周围使用 {}

如果$text.$grpnr 应该是一个变量名并且您打算将$grp-&gt;text 存储到其中,那么:

{$text.$grpnr} = $grp->text;

这在 PHP 5 中不起作用。

注意将数字与字符串进行比较

'7'

false,因为PHP 将进行文本比较,并且字母表中'7' 位于'6' 后面。如果要使用数字比较,请与 63 进行比较,如果是文本,则将 $grpnr 转换为数字类型。

建议

根据我对您问题的最佳理解,您需要类似

foreach ($getgrouptxt as $grp) {
    $grpnr = $grp->grp;
    while (((int)$grpnr) < 63) {
        $grp->text = $text.$grpnr;
    }
}

【讨论】:

  • 感谢您的{}建议。设法通过执行以下操作来修复它foreach($grptxt as $key =&gt; $value) { if($key &lt; '63') { ${"text".$key} = $value; } }
  • @MilboDoe 欢迎您。如果这个答案帮助你解决了问题,那么你可以考虑接受它作为正确答案。
  • 您的答案将被接受,作为正确答案,但是我绕过了 Array 的做法。 foreach ($getgrouptxt as $grps){ $grpnr = $grps-&gt;grp; $text = $grps-&gt;text; array_push($grptxt[$grpnr]=$text); }
  • @MilboDoe 谢谢。您的新代码不再与 63 相比。这对您来说好吗?
猜你喜欢
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2023-04-06
  • 2014-05-27
相关资源
最近更新 更多