2009-11-15 3 views
0

У меня есть эта строка, где я положил все вводные теги в (array) $opened и все закрывающие теги в (array) $closed, например, так:Как найти и заменить путем сравнения двух PHP массивов

'<div> 
    Test 
</div> 

<div> 
    <blockquote> 
     <p>The quick</p> 
     <blockquote> 
      <p>brown fox <span>jumps <span>over <img src="#" /> the' 

Результаты этих двух массивов:

$opened =

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" 
} 

$closed =

array(2) { 
    [0]=> string(3) "div" 
    [1]=> string(1) "p" 
} 

мне нужно как-то сказать:

Найти первое вхождение $closed[0] (который "div") в $opened массиве и удалить его из $opened массива, а затем повторите, пока все $closed метки ("div и "p") нет были удалены с верхней части $opened.

+0

Вы используете один и тот же фрагмент кода я дал в другой вопрос? : p –

+0

Нет, медитер. Я буду использовать/изучать материал DOM позже. =) У меня есть собственный, очень специфичный RegEx, который я использую, это похоже на ваше предложение без DOM. – Jeff

+0

Что вы пытаетесь сделать? Какой-то разбор разметки? – Gumbo

ответ

1

Надеюсь, это кому-то поможет. Это то, что я придумал:

<?php 

    for ($i = 0; $i < $num_closed; $i++) 
    { 
     unset ($opened[ array_search($closed[ $i ], $opened) ]); 
    } 

?> 

Я также придумал цикл for который работал, но вы должны были управлять $opened[$i] и $closed[$n] независимо друг от друга, и это было немного больше кода, так что я в конце концов решил на вот этот.

0

Я не уверен, что это то, что вы ищете, но это удалит первый экземпляр вещи, которую вы ищете.

<?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 />"; 
?> 
0

Я не могу сказать по вашему вопросу, но если ваша цель - очистить фрагмент кода HTML, почему бы просто не использовать расширение HTMLTidy?

Tutorial

Смежные вопросы