如何避免未定义的偏移

php
2022-08-30 09:10:03

您如何轻松避免收到此错误/通知:

Notice: Undefined offset: 1 in /var/www/page.php on line 149

...在此代码中:

list($func, $field) = explode('|', $value);

分解并不总是返回两个值,但是如果你想使用list()如何轻松避免通知呢?


答案 1
list($func, $field) = array_pad(explode('|', $value, 2), 2, null);

两个变化:

  • 它将返回的数组的大小限制为 2。似乎,只有这个是想要的explode()
  • 如果返回的值少于两个,它将追加,直到数组包含 2 个值。有关详细信息,请参阅手册:array_pad()null

这意味着,如果 中没有 ,则 。当然,您可以使用要定义的每个值作为默认值(而不是 )。它也可以交换 和 的行为|$value$field === null$fieldnull$func$field

list($func, $field) = array_pad(explode('|', $value, 2), -2, null);

现在是 ,当 中没有 时。$funcnull|$value


答案 2

我不知道有哪种方法可以做到这一点,同时又能保持便利性

list($func, $field) = explode('|', $value);

但是,由于无法做到这一点真的很可惜,您可能需要考虑一种偷偷摸摸的间接方法:

list($func, $field) = explode('|', $value.'|');

我已经根据需要追加到尽可能多的s,以确保它将在数组中产生至少2个项目。对于变量,请添加分隔符字符。$value|explodenn-1

这样,您就不会收到任何错误,您可以保留方便的赋值,并且输入中不存在的任何值都将设置为空字符串。在大多数情况下,后者不应该给你带来任何问题,所以上述想法会起作用。list


推荐