【问题标题】:Unable to define variables as empty in foreach loop无法在 foreach 循环中将变量定义为空
【发布时间】:2017-12-23 13:10:26
【问题描述】:

我正在尝试通过 foreach 循环定义三个空变量,以使我的代码更清晰。这是我尝试过的,但是我看到了错误:

注意:未定义变量:hi

foreach(['$hi','$bye','$hello'] as $key) {
    $key = "";
}

$hi .= "hello";

当我删除 foreach 循环并简单地一一定义每个空变量时,就像这样,它可以工作:

$hi = "";
$bye = "";
$hello = "";

【问题讨论】:

  • 你为什么使用单引号?你可以使用双引号或不加引号
  • @AnimeshSahu 如果我删除引号,它会说所有变量都是未定义的。
  • PHP101 - 每当您将某些内容放在引号中时,它就会变成一个字符串。 '$hi','$bye','$hello' 都是字符串,因此您不能将它们作为变量传递给它们。

标签: php foreach


【解决方案1】:

您分配给$key,而不是分配给它命名的变量。要间接通过变量,您需要使用$$key。但变量的值不应包含$,而应包含变量名。

foreach (['hi', 'bye', 'hello'] as $key) {
    $$key = "";
}
$hi .= "hello";

但是,如果您发现自己使用了这样的可变变量,则几乎可以肯定您做错了什么。您可能应该改用关联数组。

【讨论】:

    【解决方案2】:

    您有保存在 $key 中的字符串。所以 $key 的值是一个字符串,你把它设置为 ""。

    稍后您想将一些内容附加到您从未使用过的变量中。

    试着去掉'并写

    foreach([$hi, $bye, $hello] as $key) {
    

    通常这不是初始化多个变量的最佳方式。试试这个

    Initializing Multiple PHP Variables Simultaneously

    【讨论】:

    • 太棒了,感谢您提供指向该答案的链接,因为我认为这比使用数组要简单得多。再次感谢!
    【解决方案3】:

    更简单的方法:

    list($hi, $bye, $hello) = "";

    【讨论】:

    • 用这个比$hi = $bye = $hello = "";更有好处吗?
    • List的情况下,使用字符串时变量为NULL,实际上$hi = $bye = $hello = "";更好。
    【解决方案4】:

    foreach 在内存中创建了一个新的数组变量,因此您只需清除内存中数组中的这些值,这在 foreach 语句中是无用的。最好的办法是:

    $h1=$bye=$hello="";
    

    我不认为 foreach 进程会比 Simple equal (=) 更快地工作,foreach 函数比简单 = 使用更多 CPU 资源。那是因为数学 CPU 存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-18
      • 2015-05-01
      • 1970-01-01
      • 2020-11-03
      • 2018-08-23
      • 2019-08-21
      • 1970-01-01
      • 2020-03-18
      相关资源
      最近更新 更多