【问题标题】:undefined offset even though it's defined未定义的偏移量,即使它已定义
【发布时间】:2019-04-08 17:27:07
【问题描述】:
$a = array("rob", "kate", "alex", "nick");
$q = (isset($_REQUEST["q"]) ? $_REQUEST["q"] : null);
$arr =  explode(".", $q);

$output = array();
foreach ($a as &$value) {
    if (substr($value, 0, strlen($arr[1])) === $arr[1])

我在这部分代码中得到一个未定义的偏移错误:

($arr[1])) === $arr[1])

$arr[1] 的两个,即使我已经定义了它们。

为什么我仍然会收到此消息?

错误信息:

注意:未定义的偏移量:第 10 行 D:\domain.php 中的 1

【问题讨论】:

  • 向我们展示$arr和$q的转储内容。
  • @koeneman 但它说的是“通知”而不是“错误”...?
  • @koeneman 这不会解决您的问题,而且是一个糟糕的主意。 @ 只是抑制错误。根据定义,通知是试图引起您的注意以通知您,因为某些事情无法正常工作。您最好的选择是解决问题,而不是掩盖或隐藏它。首先,请您提供我上面要求的转储信息(var_dump / print_r)。
  • 您的问题是 $_REQUEST["q"] 似乎没有设置。你在null 上运行explode,所以稍后索引1 未定义。
  • '那么我必须做些什么才能让它存在,因为它应该存在对吗?' - 我们不知道它是否应该存在,因为我们不知道'不知道这个脚本/应用程序应该做什么(我并不是说我们需要知道,因为问题应该是独立的)。

标签: php undefined offset


【解决方案1】:

你可以在使用之前检查$arr是否是一个数组

$a = array("rob", "kate", "alex", "nick");
$q = (isset($_REQUEST["q"]) ? $_REQUEST["q"] : null);
$arr =  explode(".", $q);

$output = array();
foreach ($a as &$value) {
    if (isset($arr[1]) && substr($value, 0, strlen($arr[1])) === $arr[1]);

【讨论】:

  • 如果没有设置$arr[1],第一次跳出循环不是更好吗?这样你就不会毫无意义地继续循环,即使它永远不会执行任何代码。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2013-08-18
  • 2023-04-11
  • 2011-03-13
  • 2022-01-21
  • 2022-01-02
  • 2013-01-25
相关资源
最近更新 更多