如何更正此非法字符串偏移量?

2022-08-30 14:54:43

我收到此错误“警告:在第32行的/home/mysite/public_html/wp-content/themes/evento/lib/php/extra.class.php中的字符串偏移量'type'”

我意识到文件中的这一部分代码是错误的,但是我在PHP中还没有那么好,我想知道是否有人可以帮助我重写这一部分以消除错误。谢谢!(错误从第 32 行开始,这是下面 if 语句的开头)

代码如下:

/* new version */
    function get_attachment_struct( $inputs ){
        $attach = array();

    if( $inputs['type'] == 'attach' ){ 
            $name = $inputs['name'];
            $attach = array(
                0 => array(
                    'name' => $name,
                    'type' => 'text',
                    'label' =>  'Attachment URL',
                    'lvisible' => false,
                    'upload' => true,
                ),
                1 => array(
                    'name' => $name .'_id',
                    'type' => 'hidden',
                    'upload' => true
                ),
            );

            if( isset( $inputs[ 'classes' ] ) ){
                $attach[0]['classes'] = $inputs[ 'classes' ];
                $attach[1]['classes'] = $inputs[ 'classes' ] . '_id';
            }
        }
        return $attach;
    }

    /* new version */

答案 1
if ($inputs['type'] == 'attach') {

代码有效,但它期望函数参数是数组。使用时的“非法字符串偏移量”警告意味着正在向函数传递字符串而不是数组。(然后由于字符串偏移量是一个数字,因此不合适。$inputs$inputs['type']'type'

因此,从理论上讲,问题出在其他地方,代码的调用方没有提供正确的参数。

但是,此警告消息是 PHP 5.4 中的新增功能。如果发生这种情况,旧版本不会发出警告。它们会默默地转换为 ,然后尝试获取字符串的字符 0(第一个字符)。因此,如果这段代码应该工作,那是因为滥用这样的字符串不会在PHP 5.3及以下版本上引起任何投诉。(很多旧的PHP代码在升级后都遇到过这个问题。'type'0

您可能希望通过检查调用代码来调试为什么为函数指定字符串,并通过在函数中执行 a 来找出它的值。但是,如果您只想关闭警告以使其行为类似于 PHP 5.3,请将该行更改为:var_dump($inputs);

if (is_array($inputs) && $inputs['type'] == 'attach') {

答案 2
if(isset($rule["type"]) && ($rule["type"] == "radio") || ($rule["type"] == "checkbox") )
{
    if(!isset($data[$field]))
        $data[$field]="";
}

推荐