получить содержимое структурированного текстового файла в массив PHP

У меня есть содержимое в текстовом файле, разбитое на блоки, которые в дальнейшем разбиваются на пары поле / значение. Например:

title:: Article 1 Title
----
link:: www.link.to/a_site
----
file:: image1.png
----
description:: Some markdown text content describing the image
====
title:: Article 2 Title
----
link:: www.link.to/another_site
----
file:: image2.png
----
description:: Some more markdown text content describing another image

Используя этот метод (модифицированный из более раннего вопроса / amswer, который я нашел здесь):

<?php
$example = array();
$file = explode("====", file_get_contents("content/example.md"));
foreach ( $file as $content ) {
$example[] = array_filter(array_map("trim", explode("----", $content)));
}

var_dump($example);

?>

Я получаю каждый блок содержимого в массив, но не пары ключ / значение:

array (size=2)
0 =>
array (size=4)
0 => string 'title:: Article 1 Title' (length=23)
1 => string 'link:: www.link.to/a_site' (length=25)
2 => string 'file:: image1.png' (length=17)
3 => string 'description:: Some markdown text content describing the image' (length=61)
1 =>
array (size=4)
0 => string 'title:: Article 2 Title' (length=23)
1 => string 'link:: www.link.to/another_site' (length=31)
2 => string 'file:: image2.png' (length=17)
3 => string 'description:: Some more markdown text content describing another image' (length=70)

Второй пример, приведенный в этом ответе, успешно разделяет мои пары ключ / значение:

<?php
$example = array();
$file = explode("====", file_get_contents("content/example.md"));
foreach ( $file as $content ) {
foreach(array_filter(array_map("trim",explode("----", $content))) as $line)
{
list($key,$value) = explode(":: ", $line);
$example[$key] = $value ;
}
}

var_dump($example);
?>

Выходы:

array (size=4)
'title' => string 'Article 2 Title' (length=15)
'link' => string 'www.link.to/another_site' (length=24)
'file' => string 'image2.png' (length=10)
'description' => string 'Some more markdown text content describing another image' (length=56)

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

(Мой ожидаемый результат:

array (size=2)
0 =>
array (size=4)
'title' => string 'Article 1 Title' (length=15)
'link' => string 'www.link.to/a_site' (length=18)
'file' => string 'image1.png' (length=10)
'description' => string 'Some markdown text content describing the image' (length=47)
1 =>
array (size=4)
'title' => string 'Article 2 Title' (length=15)
'link' => string 'www.link.to/another_site' (length=24)
'file' => string 'image2.png' (length=10)
'description' => string 'Some more markdown text content describing another image' (length=56)

1

Решение

Попробуйте использовать этот вид цикла:

$result = array();
$file = explode("====", file_get_contents("content/example.md"));
foreach ( $file as $content ) {
$example = array();
foreach(array_filter(array_map("trim",explode("----", $content))) as $line)
{
list($key,$value) = explode(":: ", $line);
$example[$key] = $value ;
}
$result[] = $example;
}
var_dump($result);
0

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

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

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