【问题标题】:PHP Some help understanding this !issetPHP 一些帮助理解这个!isset
【发布时间】:2015-05-10 22:37:52
【问题描述】:

如果有人可以向初学者解释这一段代码,我正在尝试理解这个简单的代码。请耐心等待我的简单代码并尝试理解这一点。

我了解循环在做什么,只是 !isset($value[$values]) 部分让我感到困惑。

有人可以向我解释!isset 发生了什么以及为什么它没有设置吗?

例子

$array1 = [1, 2, 3];

$array2 = [4, 5, 6];

$array3 = [7, 8, 9];

$value = [];

foreach ([$array1, $array2, $array3] as $arr) {
    foreach ($arr as $values) {

        if (!isset($value[$values])) { // Why is this part of the code not set?
         ...
        }

    }
}

据我了解是:

1)$value[]值为空数组

2) $value[$values] 你传入 $values (1, 2, 3, 4, 5 ...) 作为 $value 数组的 $key

3) 当我在内部 foreach 循环中 var_dump $value[$values] 得到 Notice: Undefined index: 为什么会得到这个?索引应该是数字吧?

4) 最后,为什么$value[$values] 被认为未设置?

【问题讨论】:

  • 它没有设置,因为它没有设置。尝试手动单步执行循环。仔细想一想就明白了。
  • 是不是因为你用数字键[$values]分配$value数组,没有值?
  • 没有。您没有为 $value 或其元素分配任何内容。也许你会感到困惑,因为$value 是一个数组而$values 是一个标量,所以两者都被错误命名了。您收到的两个答案都是正确的。你认为isset 是做什么的?
  • 我想我明白了,$value 是空数组,你是说如果 $value 数组的键为 $values 没有设置那么......这是因为你没有还没分配吗?
  • 是的。这就是未定义的索引,所以这就是您收到通知的原因。

标签: php arrays key isset


【解决方案1】:

当您运行此代码时,$value 为空,因此您测试的所有值都未设置,此数组中没有键 1、2、3、4、5... 所以这就是你得到未定义索引错误的原因......

【讨论】:

  • 对,我现在明白了,它没有分配。谢谢。
【解决方案2】:

$value 是一个空数组。因此,在您为该键分配值之前,不会设置您在该数组中调用的任何键。

$value[$values] 正在传递[ 1, 2, 3 ][ 4, 5, 6 ][ 7, 8, 9 ],所以你正在调用$value[1]$value[2] 等。

您收到undefined index,因为索引未定义。 PHP 可以很好地处理这个问题并发出Notice。其他语言(例如 Java)会发出 Null Pointer Exception

最后,因为$value 是一个空数组,并且没有设置该键,所以isset() 返回false。然后!isset() 会返回true,这样代码就会执行。

【讨论】:

  • 对于未定义的索引部分 - 除非我提供值和键,否则不能认为索引已定义?你的最后一句话,你所说的 $values 是一个空数组是什么意思?它不只是带有数字的 $ 变量吗? foreach ($arr as $values)
  • 我猜你的意思是 $value 是你上一条语句中的空数组。
  • 感谢您的详尽解释。
猜你喜欢
  • 2016-02-10
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2011-02-11
相关资源
最近更新 更多