You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用preg_split()后如何处理WordPress短代码中的缺失元素?

解决方案:处理分割后可能为空的变量

解决这个问题的核心是避免直接访问数组不存在的索引,同时给可能为空的变量设置默认值,下面是几种实用方案:

方案1:使用null合并运算符(PHP 7+)

直接给每个变量设置默认空字符串,即使数组索引不存在也不会报错:

function display_custom_post_type() {
    // ... 无关代码 ...
    $title = get_the_title();
    $str = preg_split('(\||\[|\]|=)', $title,-1, PREG_SPLIT_NO_EMPTY);
    
    // 用null合并运算符设置默认值
    $first = $str[0] ?? '';
    $second = $str[1] ?? '';
    $third = $str[2] ?? '';
    $fourth = $str[3] ?? '';
            
    $string .= '<h3 class="test-parl-title"><div>' . $first . '</div></h3>';
            
    $string .= '<h5>' . $second . ' ' . $third . ' ' . $fourth . '</h5>';
    // ... 无关代码 ...
    return $string;
}

??运算符会优先取左侧存在且非null的值,否则用右侧的默认空字符串,能有效避免数组索引未定义的警告。

方案2:兼容低版本PHP的判断方式

如果你的环境PHP版本低于7,可以用isset配合三元运算符:

function display_custom_post_type() {
    // ... 无关代码 ...
    $title = get_the_title();
    $str = preg_split('(\||\[|\]|=)', $title,-1, PREG_SPLIT_NO_EMPTY);
    
    $first = isset($str[0]) ? $str[0] : '';
    $second = isset($str[1]) ? $str[1] : '';
    $third = isset($str[2]) ? $str[2] : '';
    $fourth = isset($str[3]) ? $str[3] : '';

    // 可选:过滤空值,避免输出多余空格
    $subtitle_parts = array_filter([$second, $third, $fourth]);
    $subtitle = implode(' ', $subtitle_parts);
            
    $string .= '<h3 class="test-parl-title"><div>' . $first . '</div></h3>';
    $string .= '<h5>' . $subtitle . '</h5>';
    // ... 无关代码 ...
    return $string;
}

array_filter会自动去掉空的元素,implode拼接时不会出现多余的空格,让输出更整洁。

方案3:补全数组长度

用array_pad把数组补到固定长度,不足的位置用空字符串填充,之后直接取索引即可:

function display_custom_post_type() {
    // ... 无关代码 ...
    $title = get_the_title();
    $str = preg_split('(\||\[|\]|=)', $title,-1, PREG_SPLIT_NO_EMPTY);
    
    // 把数组补到4个元素,不足的用空字符串填充
    $str_padded = array_pad($str, 4, '');
    $first = $str_padded[0];
    $second = $str_padded[1];
    $third = $str_padded[2];
    $fourth = $str_padded[3];
            
    $string .= '<h3 class="test-parl-title"><div>' . $first . '</div></h3>';
    $string .= '<h5>' . $second . ' ' . $third . ' ' . $fourth . '</h5>';
    // ... 无关代码 ...
    return $string;
}

这种方式逻辑简洁,一次性处理数组长度问题,后续变量赋值无需额外判断。

另外注意:代码里的print_r($title)是调试用的,上线前记得移除,避免输出到页面影响展示。

内容的提问来源于stack exchange,提问作者toomanyairmiles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:20:37