按特定字符拆分文档,然后进一步拆分为变量

时间:2014-10-17 14:51:04

标签: php arrays

我正在努力弄清楚如何最好地拆分我拥有的一些数据。无论是分成多个单独的数组,还是嵌套数组,还是不同的东西。

我有一个文件,其中包含许多不同项目的标题,文件名和日期。每个项目都使用字符^分隔,列表的每个部分都以波浪号~

分隔

该文件看起来像这样:

Example post one~example-post-one~Friday 17 October 2014^
Wayfinding For The Mobile Web~wayfinding-for-the-mobile-web~Friday 17 October 2014^

我创建了一个函数,它使用^作为分隔符来抓取数据并将其分成数组:

function getPostList(){
    $masterposts = "../posts/master-allposts.txt";
    $current = file_get_contents($masterposts);
    $masterpostlist = explode('^', $current);
    return $masterpostlist;
}

结果是这样的:

array(3) { [0]=> string(46) "Example post one~example-post-one~Friday 17 October 2014" [1]=> string(83) " Wayfinding For The Mobile Web~wayfinding-for-the-mobile-web~Friday 17 October 2014" [2]=> string(0) "" } 

但是我现在正试图进一步分解该数组,以便我可以为每个输出所有单独的部分。理想情况下为字符串变量$title, $filename and $publishdate

我做到了这一点,但我认为我遇到了问题,因为我每次都可能覆盖数组。你会怎么做?

foreach ($masterpostlist as $post){
    $postParts = explode('~',$post);
    var_dump($postParts);
}

1 个答案:

答案 0 :(得分:0)

只需将原始未爆炸变量替换为爆炸变量,即可“转换”已有阵列。

foreach ($masterpostlist as &$post){
    $post = explode('~',$post);
}

这使用引用&运算符,并允许foreach循环内的代码更改循环的变量。另外,它只会改变循环中使用的临时副本。

在你的函数中,它将像这样使用:

function getPostList(){
    $masterposts = "../posts/master-allposts.txt";
    $current = file_get_contents($masterposts);
    $masterpostlist = explode('^', $current);

    foreach ($masterpostlist as &$post){
        $post = explode('~',$post);
    }

    return $masterpostlist;
}