只要我没有调试,这个if语句就可以正常工作
if (!is_array($post_options['categoryid']['wpcatid'][1])) {
do something
}
但是在调试时我得到了这个通知
Notice: Undefined index: wpcatid
现在的问题是定义索引(我猜想是isset),但是如果将其设置为空(似乎是设置为空),则可以正常工作吗?
无论如何,关于如何摆脱此未定义索引通知的任何建议?
您正在检查$post_options['categoryid']['wpcatid'][1]是否不是数组,但是前面的键'wpcatid'也不存在。
因此,您需要与isset结合使用以避免错误。
下面是一个示例,但是您需要的逻辑可能需要不同的语句:
if (isset(
$post_options['categoryid'],
$post_options['categoryid']['wpcatid'],
$post_options['categoryid']['wpcatid'][1]
) &&
!is_array($post_options['categoryid']['wpcatid'][1])
) { /* do stuff */ }
在检查$post_options['categoryid']['wpcatid'][1]是否不是数组之前,上面的方法检查了所有内容是否依次存在。但是,如果尚未设置,但是您仍然需要运行条件逻辑,则需要对其进行适当的修改。
如果您正在编写Wordpress插件,则无法更改错误报告级别,并且绝对不应该使用错误沉默@运算符。
最好明确安排要在哪种条件下执行逻辑的特定部分。
从评论看来,您需要的是:
if (
empty($post_options['categoryid']) ||
empty($post_options['categoryid']['wpcatid']) ||
empty($post_options['categoryid']['wpcatid'][1]) ||
!is_array($post_options['categoryid']['wpcatid'][1])
)
简而言之:
如果(发布选项中没有类别ID ...或有,但是没有wpcatid,或者有一个wpcatid,但是那里没有键为1的元素,或者有,但是该元素不是数组)
这是有道理的...但是,由于isset为false,并且!is_array为true,因此它将解析为false。当这解析为true时,我需要做一些事情(没有数组)..这似乎是主要问题...这有意义吗?
@艾伦。它只是根据您的需要调整支票。添加了一些细节。香港专业教育学院在那里使用空而不是isset-下面的简单英语解释解释了它的作用。此处有更多详细信息:stackoverflow.com/questions/1219542/
实际上,我尝试使用您以前的代码,如果我先检查是否存在setset和数组(这是我不想要的),这很有意义,因此建议这样做:if(!(isset($ post_options [categoryid],$ post_options [categoryid] [wpcatid],$ post_options [categoryid] [wpcatid] [1])&& is_array($ post_options [categoryid] [wpcatid] [1]))){//做东西
为什么不只使用isset()? PHP中的isset()函数确定是否设置了变量,并且该变量不为NULL。它返回一个布尔值,也就是说,如果设置了变量,它将返回true;如果变量值为null,则将返回false。
另一个选择是使用error_reporting(E_ALL ^ E_NOTICE);。您还可以关闭php.ini文件或.htaccess文件中的错误报告,但是如果您仍处于测试阶段,则不认为这是明智之举。
第三,尽管不满意,但要使用@抑制错误选项。您可以在此处找到更多信息。 http://php.net/manual/zh/language.operators.errorcontrol.php。我认为您只需要坚持使用isset()
谢谢,好了,这是wordpress插件,不幸的是有些人已经调试了,所以我测试了debug以消除错误和通知。那么如果(isset(x)&&!is_array(x))...似乎isset将为false,is_array为true,那么结果将为false-我的原始语句为true