(Regex değil) bir sayfadaki metin öğeleri bulma optimize etmek için bir yolu var mı

2 Cevap php

Bir HTML belgesi içinde uygun bir terim bulma sıradanifade yöntemini çöpe çeşitli konuları gördükten sonra, ben ben metin bit almak için Basit HTML DOM PHP çözümleyici (http://simplehtmldom.sourceforge.net/) kullandım sonra, ama benim kod uygun olup olmadığını bilmek istiyorum. Ben çok kez döngü kulüpler gibi hissediyor. Aşağıdaki döngü optimize etmek için bir yolu var mı?

//Get the HTML and look at the text nodes
   $html = str_get_html($buffer);
   //First we match the <body> tag as we don't want to change the <head> items
   foreach($html->find('body') as $body) {
    //Then we get the text nodes, rather than any HTML
    foreach($body->find('text') as $text) {
     //Then we match each term
     foreach ($terms as $term) {
      //Match to the terms within the text nodes
      $text->outertext = str_replace($term, '<span class="highlight">'.$term.'</span>', $text->outertext);
     }       
    }
   }

Örneğin, ben belki döngü başlamadan önce herhangi bir sonuç varsa kontrol belirlemek için bir fark olur?

2 Cevap

Sen dış foreach döngüsü gerekmez; bir iyi biçimli belgede tek vücut etiket genellikle var. Bunun yerine, sadece kullanmak $body = $html->find('body',0);.

Sadece tek bir yineleme ile bir döngü tüm döngü değil çalışma zamanında esasen eşdeğer olduğundan Ancak, muhtemelen çok performans etkisini iki şekilde olmayacaktır. Yani gerçekte, gerçekten sadece bile orijinal kodu 2 iç içe döngüler, değil 3 var.

Cehalet dışında konuşma, find keyfi XPath ifadeleri sürer? Öyle ise, içine bir iki dış döngüler katlayabilirsiniz:

foreach($html->find('body/text') as $body) {
    ...
}