如何通过比较两个PHP数组来搜索和替换
我将所有开始标记放入如何通过比较两个PHP数组来搜索和替换,php,arrays,Php,Arrays,我将所有开始标记放入(数组)$opened,所有结束标记放入(数组)$closed,如下所示: '<div> Test </div> <div> <blockquote> <p>The quick</p> <blockquote> <p>brown fox <span>jumps <span>over <
(数组)$opened
,所有结束标记放入(数组)$closed
,如下所示:
'<div>
Test
</div>
<div>
<blockquote>
<p>The quick</p>
<blockquote>
<p>brown fox <span>jumps <span>over <img src="#" /> the'
$closed=
array(8) {
[0]=> string(3) "div" // Need removed
[1]=> string(3) "div"
[2]=> string(10) "blockquote"
[3]=> string(1) "p" // Need removed
[4]=> string(10) "blockquote"
[5]=> string(1) "p"
[6]=> string(4) "span"
[7]=> string(4) "span"
}
array(2) {
[0]=> string(3) "div"
[1]=> string(1) "p"
}
我得说:
在
$opened
数组中找到第一个出现的$closed[0]
(即“div”
)并将其从$opened
数组中删除,然后重复,直到所有$closed
标记(“div
和“p”
)已从$opened
顶部删除,我不确定这是否是您要查找的内容,但这将删除您要查找的内容的第一个实例
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$opened_tags = array("div", "div", "blockquote", "p", "blockquote", "p", "span", "span");
$closed_tags = array("div", "p");
$find = "div";
$size = sizeof($closed_tags);
for($i=0; $i<$size; $i++) {
if($closed_tags[$i] == $find){
unset($closed_tags[$i]);
break;
}
}
echo "closed_tags with empty spaces: ".print_r($closed_tags, true)."<br /><br />";
$closed_tags = array_values($closed_tags);
echo "closed_tags array indexed correctly: ".print_r($closed_tags, true)."<br />";
?>
希望这对某人有所帮助。这就是我想到的:
<?php
for ( $i = 0; $i < $num_closed; $i++ )
{
unset ( $opened[ array_search( $closed[ $i ], $opened ) ] );
}
?>
我还为循环设计了一个,但您必须操作$opened[$I]和$closed[$n]是独立的,而且代码要多一些,所以我最终决定使用这个。我不能从你的问题中看出,但是如果你的目的是清理html代码片段,为什么不简单地使用HTMLIDY扩展呢
您是否使用了我在另一个问题中给出的相同代码段?:Phae您看过了吗?我强烈建议您使用它而不是这个。相信我,DOM并不是那么难,而且比您现在尝试的要容易得多。正如许多人坚持的那样,regex不是解析HTML的方法,而且它比我建议的DOM方法。你能看一看并尝试一下吗?如果你有具体的问题,请评论我的答案。来吧,坦白说:你发布这样一个问题只是为了激发,对吧?:)为了至少有一种解析器,我会做以下操作:在保留标记的同时拆分输入(请参见
preg\u split
的preg\u split\u DELIM\u捕获)。然后迭代各部分,将开始标记放在堆栈上,查看是否有相应的结束标记,反之亦然。如果开始标记和结束标记匹配,则从堆栈中删除开始标记。这样做可以发现开始/结束标记不匹配,并将其删除或在正确位置添加对应标记。