如何提取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
相关产品推荐
相关产品推荐

