Я пытаюсь перетасовать статьи с помощью функции 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;