我在文本文件中有一个内容,分成块,这些块进一步分为字段/值对。例如:
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
使用此方法(modified from an earlier question/amswer I found here):
<?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)
答案 0 :(得分:0)
尝试使用这种循环:
$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);