Перемешать текст внутри элементов HTML

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

Однако, используя синтаксический анализатор Simple 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;
}
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]