Error: Trying to access array offset on value of type null in my PHP code

Error: Trying to access array offset on value of type null in my PHP code

我对 PHP 的了解有限。我在 forloop 部分的这段代码中收到此错误。

Trying to access array offset on value of type null on line ...

当我在 Wordpress 项目中启用调试时,我在本地环境和在线环境中都看到了这一点。我认为与嵌套的 forloop 有关,但我不确定确切的问题是什么。

在 try 块之后以 if 条件开头的行抛出错误。我已经删除了 if 条件中的一些代码并将它们替换为 ... 我在 forloop 或变量声明代码中缺少什么?

public function render_element_css( $code, $id ){
        
        global $kc;
        
        $css_code = '';
        $css_any_code = '';
        $css_desktop_code = '';
        $pro_maps = array( 
            'margin' => array('margin-top','margin-right','margin-bottom','margin-left'), 
            'padding' => array('padding-top','padding-right','padding-bottom','padding-left'), 
            'border-radius' => array('border-top-left-radius','border-top-right-radius','border-bottom-right-radius','border-bottom-left-radius')
        );
            
        try{    
            $screens = json_decode( str_replace( '`', '"', $code ), true );
            if (is_array( $screens['kc-css']))
            {
                kc_screen_sort ($screens['kc-css']);

                foreach ($screens['kc-css'] as $screen => $groups)
                {
                ...
                    
                }
            
            }
            
        }catch( Exception $e ){
             echo "\n\n/*Caught exception: ",  $e->getMessage(), "*/\n\n";
        };
        
        return kc_images_filter($css_any_code.$css_code);
        
    }

问题

这一行:

$screens = json_decode( str_replace( '`', '"', $code ), true );

将使 json 在您尝试解码之前无效。

假设您有这样一个字符串:

$json = '{"foo": "lorem `bar` ipsum"}';

如果你 运行 你当前 str_replace() 在尝试解码字符串之前,它将变成:

$json = '{"foo": "lorem "bar" ipsum"}';

看到引号的问题了吗?如果您尝试使用 json_decode() 对其进行解码,它将失败并且 return null,这意味着 $screens['kc-css'] 将抛出您收到的错误消息。

解决方案

您需要使用反斜杠转义双引号:\" 如果您想在双引号字符串中使用文字双引号。

改为:

$screens = json_decode( str_replace( '`', '\"', $code ), true );

它应该可以工作。

Here's a demo