【问题标题】:Why won't this PHP iteration work?为什么这个 PHP 迭代不起作用?
【发布时间】:2010-10-20 03:50:30
【问题描述】:

我想将 foreach 循环的结果转换为一个字符串变量,以便以后使用(所以我不需要将 foreach 循环粘贴到任何地方)。我有这个:

foreach($pairs as $d=>$m) {
$orderedpairs .= "[".$d."],[".$m."]"+"<br />";
}
echo $orderedpairs;

如果我用“echo”代替赋值运算符,它工作正常,所以循环没问题,我认为这只是有问题的变量赋值。谢谢!

【问题讨论】:

  • 旁注:考虑使用 printf 或字符串插值,使其更具可读性。 (1) $orderedpairs .= "[$d],[$m]
    "; (2) $orderedpairs .= printf('[%s],[%s]
    ', $d, $m);
  • 并且不要忘记在循环开始之前初始化 $orderedpairs。忽略这本身不是问题,但应该这样做 - 否则可能会引发通知(并且可能会出现奇怪的错误或安全漏洞,请记住 register_global)。

标签: php iteration concatenation


【解决方案1】:

你有一个 + 用于连接。你需要。

另外,您应该在循环之前将 $orderedpairs 定义为一个空字符串。

【讨论】:

  • 当我点击最后一个“+”时它会起作用。但是,我还没有定义 $orderedpairs。你能详细说明我为什么需要这样做吗?
【解决方案2】:

在循环之前是否将 $orderedpairs 声明为空字符串以将其实例化并将其带入范围?最后的 + 实际上也应该是 . ?

【讨论】:

    【解决方案3】:

    加号导致您的连接失败 - 将其更改为 .

    与其他人所说的相反,变量的范围不是问题。您可以在循环中声明它们并在循环之后访问它们。 PHP 变量的作用域不像 Java、C# 和其他语言。

    【讨论】:

    • 写的是同样的东西!
    • 现在只需点击“+”即可。你能进一步解释一下为什么我需要在循环之外定义 $orderedpairs 吗?看起来范围不是问题。它只是一种风格吗?
    • PHP 作用域比其他一些语言更简单。变量实际上只有“全局”或“函数”范围 - 如果在函数内部声明变量,则在该函数声明后的任何时间都可以访问它。它是否在 if 语句、while 循环或任何其他在 Java 等语言中被视为更窄范围的块内都没有关系。
    • 我什至不会说 $orderedpairs 的样式 - 我会在循环开始之前设置它,所以我知道它是空的。此外,未声明的变量会引发警告。
    【解决方案4】:

    在您的情况下,实际上不需要与运算符连接,您可以这样做:

    $orderedpairs .= "[$d],[$m]<br />";
    

    PHP 会将变量替换为它们的值。

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多