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

如何提取PHP数组字符串中<tr>与</tr>之间的内容?

问题描述

现有如下格式的PHP数组:

^ array:2 [▼
    0 => "random value1<tr>random string1</tr>random endvalue1"
    1 => "random value2<tr>random string2</tr>random endvalue2"
  )
]

需要将其转换为仅保留<tr>与</tr>之间内容的数组,期望结果如下:

^ array:2 [▼
    0 => "random string1"
    1 => "random string2"
  )
]

尝试了以下代码处理,但无法正确提取目标内容:

$array = array_map(function($key) {
    $exp = explode('<tr>', $tes);
    //$exp1 = explode('</tr>', exp[1]); // 这里无法访问数组元素
    return exp;

}, $myarray);
dd($array);

执行后得到的结果:

^ array:2 [▼
    0 => array:2 [▼
        0 => "random value1"
    1 => "random string1</tr>random endvalue1"
    ]
    1 => array:2 [▼
        0 => "random value2"
    1 => "random string2</tr>random endvalue2"
    ]
  )
]

解决方案

改进现有代码

你的代码存在变量名错误、语法错误,修正后可完成需求:

$array = array_map(function($item) {
    // 按<tr>切割,取分割后的第二部分
    $exp = explode('<tr>', $item);
    if (isset($exp[1])) {
        // 按</tr>切割,取分割后的第一部分
        $exp1 = explode('</tr>', $exp[1]);
        return $exp1[0];
    }
    // 未匹配到<tr>标签时返回空字符串,可根据需求调整
    return '';
}, $myarray);
dd($array);

更优实现:正则表达式

如果<tr>标签格式固定(无嵌套、无额外属性),用正则表达式更简洁高效:

$array = array_map(function($item) {
    // 非贪婪匹配<tr>和</tr>之间的内容
    preg_match('/<tr>(.*?)<\/tr>/', $item, $matches);
    // 返回匹配结果,无匹配时返回空字符串
    return isset($matches[1]) ? $matches[1] : '';
}, $myarray);
dd($array);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:03:03