Взрывающиеся строки в PHP


У меня есть следующий фрагмент PHP-кода.

В конечном счете, я хотел бы сохранить <p>Michael is 26</p> в переменной $str1 и <p>He likes green cars.</p><p>And white footballs</p><p>And red lollies</p><p>And yellow suns</p> в переменной $str2.

Таким образом, в основном все в первом абзаце входит в $str1 и все после этого входит в $str2.

<?php
    $str = "<p>Michael is 26</p><p>He likes green cars.</p><p>And white footballs</p><p>And red lollies</p><p>And yellow suns</p>";
    $strArray = explode('</p>', $str);
    $str1 = $strArray[0] . '</p> ';
    echo $str1;
    // variable to export remainder of string (minus the $str1 value) ?
?>

Как мне этого добиться?

Большое спасибо за любые указания.

Author: michaelmcgurk, 2011-10-18

4 answers

Используйте explode с разделителем:

 explode('</p>', $str, 2);

Это вернет:

array (
   0 => '<p>Michael is 26',
   1 => '<p>He likes green cars.</p><p>And white footballs</p><p>And red lollies</p><p>And yellow suns</p>' 
)

Итак, все, что вам нужно сделать, это:

$strArray = explode('</p>', $str, 2);
$str1 = $strArray[0] . '</p> ';
$str2 = $strArray[1];
echo $str1.$str2; //will output the original string again
 8
Author: Neal, 2011-10-18 15:55:55

Здесь нет необходимости explode(). Простые строковые операции (strpos(), substr()) подойдут отлично:

$str = "<p>Michael is 26</p><p>He likes green cars.</p><p>And white footballs</p><p>And red lollies</p><p>And yellow suns</p>";
$str1 = substr($str, 0, strpos($str, "</p>") + strlen("</p>"));
$str2 = substr($str, strpos($str, "</p>") + strlen("</p>"));

echo $str1;
// <p>Michael is 26</p>
echo $str2;
// <p>He likes green cars.</p><p>And white footballs</p><p>And red lollies</p><p>And yellow suns</p>
 3
Author: Michael Berkowski, 2011-10-18 16:08:37

Используя ваш код, добавление этого должно выполнить задачу

unset($strArray[0]);

$str2 = implode('</p>', $strArray);
 0
Author: Packet Tracer, 2011-10-18 15:56:43

Вы можете использовать preg_split Документы для этого, в отличие от explode, он позволяет просто посмотреть, где нужно разделиться. И он также поддерживает ограничение:

list($str1, $str2) = preg_split('~(?<=</p>)~', $str, 2);

Демо-версия

 0
Author: hakre, 2011-10-18 19:05:00