php 如何从数组中删除所有html标记?

l7wslrjt  于 2023-03-11  发布在  PHP
关注(0)|答案(5)|浏览(150)

php中有没有一个函数可以对数组中的所有项执行regex replace之类的操作?
我有一个数组,其中包含大量的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可能不是正确的方法,或者是吗?)

nhhxz33t

nhhxz33t1#

这里不需要正则表达式,只需要使用strip_tags()来去掉所有的html标签,然后简单地使用trim()输出,例如。

$newArray = array_map(function($v){
    return trim(strip_tags($v));
}, $m);
inkz8wg9

inkz8wg92#

如果您希望使用regex方法,可以简单地执行以下操作:

$array = preg_replace("/<.+>/sU", "", $array);
mqkwyuun

mqkwyuun3#

array_map()strip_tags()

$m = array_map( 'strip_tags', $m );

同样的原理也适用于修剪。

6yt4nkrj

6yt4nkrj4#

这里是一个带有对象检查的多维数组的变体

/**
     * @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;
    }
bnl4lu3b

bnl4lu3b5#

对于关联多维数组,我更喜欢使用array_walk_recursive

array_walk_recursive(
    $array, 
    function(&$string) {
        if (is_string($string)) {
            $string = trim(strip_tags($string));
        }
    }
);

参见文档:https://www.php.net/manual/en/function.array-walk-recursive.php
如果您对数据有把握,则可以跳过is_string,如下所示:

array_walk_recursive($stepViewEntity, 'strip_tags');

相关问题