2017-04-02 44 views
-1

我有这样的位的代码:array_key_exists()预计参数2为阵列,串给出

if(array_key_exists('customtextcolor',$atts)){ 
    // If in array, then check if none, if not none, add to CSS classes 
    if ('none' !== $atts['customtextcolor']) { 
     $custstyles[] = $atts['customtextcolor']; 
    }  
} 

这是对线90,以及我的php.log示出了线90

错误

Apr 2 08:46:16 #####。net ool www:PHP警告:array_key_exists()期望参数2是数组,字符串在/ var/www/####/wp-内容/插件/ Fusion-Builder-Custom-Text-For-HP/fusion-builder-custom-text-for-hp.php on line 90

我认为这很奇怪,因为我确定它是一个数组,因为代码按预期工作。我也用echo gettype($atts);,它返回一个数组。当我var_dump($atts);它呈现整个阵列。

任何想法php.log显示此错误消息?

如果$atts是一个字符串,为什么gettype()将它识别为数组?为什么var_dump()将其渲染为数组?

我已经看过其他array_key_exists()关于StackOverflow的问题,但他们并不是同样的问题,据我所知。

+4

正如错误提示,'$ atts'是一个'string'而不是'array' .... – Nytrix

+0

嗨@nytrix这就是为什么我使用gettype()和var_dump()来验证,$ atts是一个数组。除非它始终改变类型 - 这很奇怪。 – InsuredApple

+0

必须有一些情况导致一个字符串至少在一次调用中被写入'$ atts'。除了更深入的'varr_dump()'以外,没有什么可以缩小这种情况发生的时间和方式。 PHP绝对不会产生该错误,除非在执行时'$ atts'确实不是一个数组。 –

回答

-3

只写下面的代码行:

array_key_exists('customtextcolor', (array) $atts); 

这将cast$atts -variable到一个数组,如果它不是已经是一个数组。


你也可以检查是否有与每一个值的数组:

isset($atts['customtextcolor']);

+1

这没有意义。这是一个盲目的尝试,如果不理解就会解决某些问题。如果OP清楚地声明变量应该包含一个数组。要么它做,那么你的演员什么都不做,或者没有,那么人们应该试图找出什么是错的,而不是盲目地尝试一个类型的案例。 – arkascha

+0

非常感谢。这确实解决了错误,但我仍然困惑为什么这首先发生。我会离开它,但很奇怪。谢谢!! – InsuredApple

0

改变你,如果条件如下:

if(is_array($atts) && array_key_exists('customtextcolor',$atts))

这将检查如果$atts最初是一个数组,那么将检查array_key_exist操作。

相关问题