как правильно распарсить текст на массив?php
к примеру есть текст сохранится в базу как текст в одну ячейку.
$data ="
Раздел I ВСТУПЛЕНИЕ
Пункт 1. какой-то текст
Пункт 2. какой-то текст
Пункт 3. какой-то текст
Раздел II ПРОДОЛЖЕНИЕ
Пункт 4. какой-то текст
Пункт 5. какой-то текст
Пункт 6. какой-то текст
Раздел III ДОПОЛНЕНИЕ
Пункт 7. какой-то текст
Пункт 8. какой-то текст
Пункт 9. какой-то текст"
Как сделать из него массив, чтобы вышло:
$book = [
'chapter1' => [
'title' => 'Раздел I ВСТУПЛЕНИЕ',
'paragraphs' => [
'paragraph1' => 'какой-то текст',
'paragraph2' => 'какой-то текст',
'paragraph3' => 'какой-то текст',
]
],
'chapter2' => [
'title' => 'Раздел II ПРОДОЛЖЕНИЕ',
'paragraphs' => [
'paragraph4' => 'какой-то текст',
'paragraph5' => 'какой-то текст',
'paragraph6' => 'какой-то текст',
]
],
'chapter3' => [
'title' => 'Раздел III ДОПОЛНЕНИЕ',
'paragraphs' => [
'paragraph7' => 'какой-то текст',
'paragraph8' => 'какой-то текст',
'paragraph9' => 'какой-то текст',
]
],
];
спасибо!
Ответы (1 шт):
Автор решения: Sanya H
→ Ссылка
Самый простой вариант
<?php
$data ="
Раздел I ВСТУПЛЕНИЕ
Пункт 1. какой-то текст
Пункт 2. какой-то текст
Пункт 3. какой-то текст
Раздел II ПРОДОЛЖЕНИЕ
Пункт 4. какой-то текст
Пункт 5. какой-то текст
Пункт 6. какой-то текст
Раздел III ДОПОЛНЕНИЕ
Пункт 7. какой-то текст
Пункт 8. какой-то текст
Пункт 9. какой-то текст";
// разделяем на разделы
$chapters = preg_split("/\n\s+\n/", $data);
$books = [];
foreach($chapters as $chapter) {
// разделяем на параграфы
$chapter = explode("\n", $chapter);
if (count($chapter)) {
$chapter_key = 'chapter' . (count($books)+1);
// вытаскиваем первый параграф как заголовок
$title = trim(array_shift($chapter));
$paragraphs = [];
foreach ($chapter as $paragraph) {
$paragraph_key = 'paragraph' . (count($paragraphs)+1);
$paragraphs[$paragraph_key] = trim($paragraph);
}
$books[$chapter_key] = [
'title' => $title,
'paragraphs' => $paragraphs
];
}
}
print_r($books);