如何避免未定义的偏移量

cla*_*rkk 58 php

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

Notice: Undefined offset: 1 in /var/www/page.php on line 149
Run Code Online (Sandbox Code Playgroud)

...在这段代码中:

list($func, $field) = explode('|', $value);
Run Code Online (Sandbox Code Playgroud)

爆炸返回的值并不总是两个,但如果你想使用list(),那么你怎么能轻易避免通知呢?

Kin*_*nch 120

list($func, $field) = array_pad(explode('|', $value, 2), 2, null);
Run Code Online (Sandbox Code Playgroud)

两个变化:

  • 它将返回的数组的大小限制explode()为2.看来,只需要这个就可以了
  • 如果返回的值少于两个,则会追加null该值,直到该数组包含2个值.有关详细信息,请参见手册:array_pad()

这意味着,如果没有|$value,$field === null.当然,您可以使用您喜欢的每个值来定义默认值$field(而不是null).它也可以交换的行为$func$field

list($func, $field) = array_pad(explode('|', $value, 2), -2, null);
Run Code Online (Sandbox Code Playgroud)

现在$funcnull,当没有|$value.


Jon*_*Jon 10

我不知道这样做的直接方法也保留了方便性

list($func, $field) = explode('|', $value);
Run Code Online (Sandbox Code Playgroud)

然而,因为它实在是一种遗憾没有能够做到这一点,你可能要考虑偷偷摸摸间接的方法:

list($func, $field) = explode('|', $value.'|');
Run Code Online (Sandbox Code Playgroud)

我已根据需要附加了$value多个|s,以确保explode在阵列中至少生成2个项目.对于n变量,添加n-1分隔符.

这样您就不会出现任何错误,保持方便的list分配,输入中不存在的任何值都将设置为空字符串.对于大多数情况,后者不应该给你任何问题,所以上述想法将起作用.

  • @KilZone:它并不是真正关于"不显示"它,而是在"这段代码被编写为如果它曾经出错,它已经获得了一个错误"的思维模式中.另外,如果可能的话,最好避免使用`@`运算符.您知道运营商文档中的[警告](http://php.net/manual/en/language.operators.errorcontrol.php)吗?我不止一次地为此而堕落. (3认同)