如何将带有数组列表的文本文件转换为PHP

时间:2015-09-06 17:38:58

标签: php arrays

我有一个包含数组列表的文本文件:

'1920s' => array('20s','twenties')
'1930s' => array('30s','thirties')
'1940s' => array('40s','forties')
'1950s' => array('50s','fifties')

我想将其导入为数组数组,如下所示:

Array
(
    [1920s] => Array
        (
            [0] => 20s
            [1] => twenties
        )

    [1930s] => Array
        (
            [0] => 30s
            [1] => thirties
        )

    [1940s] => Array
        (
            [0] => 40s
            [1] => forties
        )

    [1950s] => Array
        (
            [0] => 50s
            [1] => fifties
        )

)

我导入文件:

$decadesFile = file_get_contents('/Users/derwood/capsule/decades.txt');
$decades = explode("\r",$decadesFile);

但我得到了一系列文字:

Array
(
    [0] => '1920s' => array('20s','twenties')
    [1] => '1920s' => array('20s','twenties')
    [2] => '1940s' => array('40s','forties')
    [3] => '1950s' => array('50s','fifties')

我应该使用除“file_get_contents”和“explode”之外的其他组合吗?

编辑:我确实阅读了列出的答案,但文本文件是由FMP数据库生成的,而不是print_r输出,所以由于我的经验有限,我认为问题不重复。但是,链接的问题和这里的答案都非常有助于说明它们的相关性。谢谢。

3 个答案:

答案 0 :(得分:1)

我确信每行的正则表达式可能是一个更好的解决方案但是为了使用explode并假设文件的内容在$ file中

$lines = explode("\n",$file);
foreach($lines as &$line){
    $line = explode("'",$line);
    $output[$line[1]][0] = $line[3];
    $output[$line[1]][1] = $line[5];
}
unset($lines);
var_dump($output);

答案 1 :(得分:0)

print_r函数不是保存数组的好函数。使用json_encodevar_export

请参阅:Recreate original PHP array from print_r output

的print_r_reverse函数
String test = getIntent().getExtras().getString("test");

答案 2 :(得分:0)

您在编程术语中所谈论的是“数据序列化”

https://en.m.wikipedia.org/wiki/Serialization

大多数成熟的编程语言提供了序列化数据类型的方法,以便可以存储它们(文件,内存,缓存服务器等),并在以后甚至在不同的服务器上重新创建。

你应该使用php的serialize方法将数据保存到文件中并反序列化以将数据带回范围

http://php.net/manual/en/function.serialize.php http://php.net/manual/en/function.unserialize.php

您也可以使用json,但与使用PHP的内置序列化引擎相比,它可以做的限制