$test = array('<h1>text1</h1>','<h1><a href="#">text2</a><h1>','<h1>text3</h1><p>subtext3</p>');
在很长的文本中,我用preg_split
把它们切成小块。我想删除只有h1标签包装和没有超链接。
我希望删除所有的文本看起来像:<h1>text1</h1>
//只有h1换行,没有超链接。
剩余<h1><a href="#">text2</a><h1>
, <h1>text3</h1><p>subtext3</p>
使用循环遍历每个数组元素并查找字符串"<"的每个实例。然后看看接下来的3个字符。如果它们是"h1>"那么你就有了正确的标签。如果你发现一个"<"有不同的3个字符,那么它不是一个"HTML标签,你可以删除这个数组对象。
要从数组中删除给定的对象,您可以使用unset($array[$index]),当您完成后,我建议使用排序来删除可能发生的任何索引跳过。
你会想使用strpos
这样的函数来获得字符串的位置,substr
来获得给定字符串的子集。Php.net是你的朋友:)
下面是一个与$test数组一起工作的示例函数:
<?php
$test = array('<h1>text1</h1>','<h1><a href="#">text2</a><h1>','<h1>text3</h1><p>subtext3</p>');
function removeBadElements(&$array) {
foreach($array as $k => $v) {
// $v is a single array element
$offset = 0;
do {
$pos = strpos($v, '<', $offset);
$offset = $pos + 1;
if($pos === false) { break; }
$tag = substr($v, $pos, 3);
$next = substr($v, $pos+1, 1);
if($next == '/') { continue; }
if($tag == '<h1') { continue; }
else {
unset($array[$k]);
break;
}
} while($offset + 2 < strlen($v));
}
}
echo "'nORIG ARRAY:'n";
print_r($test);
removeBadElements($test);
echo "'n'n-------'nMODIFIED ARRAY:'n'n";
print_r($test);
?>