在php中是否有一个函数可以对数组的所有条目执行正则表达式替换操作? 我有一个数组,其中包含许多带有文本的html标签,我想删除这些标签 所以基本上我转换这个:
$m = [
"<div>first string </div>",
"<table>
<tr>
<td style='color:red'>
second string
</td>
</tr>
</table>",
"<a href='/'>
<B>third string</B><br/>
</a>",
];
到此:
$m = [
"first string",
"second string",
"third string"
]
正(我希望)匹配我要删除的所有内容的正则表达式如下所示:
/<.+>/sU
问题是我现在应该如何使用它? (我的数组实际上有超过50个条目,并且在每个条目中可能有10个匹配,所以使用preg_replace可能不是可行的方式,或者是它?)
答案 0 :(得分:17)
这里不需要正则表达式,只需使用strip_tags()
删除所有html标签,然后只需输出trim()
,例如
$newArray = array_map(function($v){
return trim(strip_tags($v));
}, $m);
答案 1 :(得分:3)
如果你想要正则表达式方法,你可以简单地执行以下操作:
$array = preg_replace("/<.+>/sU", "", $array);
答案 2 :(得分:0)
答案 3 :(得分:0)
这是带有对象检查的多维数组的变体
/**
* @param array $input
* @param bool $easy einfache Konvertierung für 1-Dimensionale Arrays ohne Objecte
* @param boolean $throwByFoundObject
* @return array
* @throws Exception
*/
static public function stripTagsInArrayElements(array $input, $easy = false, $throwByFoundObject = true)
{
if ($easy) {
$output = array_map(function($v){
return trim(strip_tags($v));
}, $input);
} else {
$output = $input;
foreach ($output as $key => $value) {
if (is_string($value)) {
$output[$key] = trim(strip_tags($value));
} elseif (is_array($value)) {
$output[$key] = self::stripTagsInArrayElements($value);
} elseif (is_object($value) && $throwByFoundObject) {
throw new Exception('Object found in Array by key ' . $key);
}
}
}
return $output;
}