2015-02-19 1 views
1

Я пытаюсь перетасовать статьи с помощью функции PHP-shuffle и с Simple HTML Parser.Перемешать текст внутри элементов HTML

Например, это мое содержание:

<p>This is my article.</p> 
<h2>This is a subheading</h2> 
<p>This is an paragraph with an image inside it <img src="http://image.jpg"> 
</p> 

Выход должен быть чем-то вроде этого:

<p>article is This my .</p> 
<h2>This subheading is a</h2> 
<p>is an with an image paragraph inside This it <img src="http://image.jpg"></p> 

Однако, используя простой HTML DOM парсер, я считаю, что трудно предотвратить изображения от перетасовки, потому что они иногда помещаются внутри абзацев.

Это мой текущий сценарий. Я чувствую, что это способ усложнить, и иногда он не выводит правильный результат.

Надеюсь, кто-то может мне помочь.

$tags   = 'p, ul, ol, blockquote, h1, h2, h3, h4, h5, h6, h7'; 

    $html   = str_get_html($html); 

    /** 
    * Loop through HTML and set output 
    */ 
    foreach($html->find($tags) as $article) { 

     $element = $article->outertext; 
     $array  = $article; 
     $tag  = $article->tag; 
     $innerHTML = ''; 

     // Nested paragraphs 
     foreach ($array->find('p') as $el){ 

      $word_array = preg_replace("#[\s]+#", " ", $el->innertext); 
      $words  = explode(" ", $word_array); 
      $w   = ''; 

      shuffle($words); 

      foreach ($words as $word){ 
       $w .= $word . ' '; 
      } 

      $innerHTML .= $el->innertext = $w; 

     } 

     // List items 
     foreach ($array->find('li') as $el){ 

      $word_array = preg_replace("#[\s]+#", " ", $el->innertext); 
      $words  = explode(" ", $word_array); 
      $w   = ''; 

      shuffle($words); 

      foreach ($words as $word){ 
       $w .= $word . ' '; 
      } 

      $innerHTML .= $el->innertext = '<li>' . $w . '</li>'; 

     } 

     // Images 
     foreach ($array->find('img') as $el) { 

      // Blur image 
      $src  = stripslashes(str_replace('"', '', $el->src)); 
      $new_src = $this->create_blur_image($src); 

      // Replace url with base64 encode 
      $src  = $el->src = $new_src; 

      $innerHTML .= $el->outertext; 

     } 

     // Output 
     if ($innerHTML){ 
      $element = $article->innertext = $innerHTML; 

     } else { 

      $word_array = preg_replace("#[\s]+#", " ", $article->innertext); 
      $words  = explode(" ", $word_array); 
      $w   = ''; 

      shuffle($words); 

      foreach ($words as $word){ 
       $w .= $word . ' '; 
      } 

      $element = $article->innertext = $w; 

     } 

     $output .= $article->outertext; 

    } 

    $html = $output; 

    return $html; 

ответ

-1

Использование:

function shuffle($text){ 
$text_array = array_shuffle(explode(" ",$text)); 
$text_string = implode($text_array," "); 
return $text_string; 
}