PHP / Laravel - 查找并阅读'键值对'从文件

时间:2015-01-13 07:34:00

标签: php laravel key-value file-read

我想存储一些文字信息,但我不想为此使用数据库。例如,有一个文件:

key1: some text information 1
key2: some text information 2
key3: another text information

我想知道,使用PHP或Laravel从这个文件中找到一个特定值的最短路径是什么?

我可以使用foreach(file('yourfile.txt') as $line) {}循环将文本行存储到数组中,然后找到具有特定键的行,但也许有更短或更好的方法来执行此操作。

4 个答案:

答案 0 :(得分:4)

我认为你应该使用数组代替文本文件

在app / config目录中创建一个新文件。我们称之为constants.php

在那里你必须返回一个配置值数组。

return [
    'myData' => [
        'key1' => 'www.domain.es',
        'key2' => 'www.domain.us'
        // etc
    ]
];

您可以按如下方式访问它们

Config::get('constants.myData');
// or if you want a specific one
Config::get('constants.myData.key1');

你也可以设置它们

Config::set('myData.key1', 'test 123');

答案 1 :(得分:3)

如果所有行的格式相同([key]: [value]),您只需使用explode(": ", $line)获取值,然后将它们重写为PHP数组;

// getData('yourfile.txt') returns an associative array
function getData($file) {
    $data = file($file);
    $returnArray = array()
    foreach($data as $line) {
        $explode = explode(": ", $line);
        $returnArray[$explode[0]] = $explode[1];
    }

    return $returnArray;
}

答案 2 :(得分:0)

@leuans答案是以下功能的基础,该功能对我来说更好,因为它还去除换行符并使分隔符可配置。

// https://stackoverflow.com/a/27917087/1497139
// getConfig('yourfile.txt','separator') returns an associative array
// example: getConfig('config.ini',': ')
function getConfig($file,$separator) {
    $data = file($file);
    $returnArray = array();
    foreach($data as $line) {
        $parts=explode($separator, $line);
        $name=trim($parts[0]);
        $value=trim($parts[1]);
        $returnArray[$name] = $value;
    }
    return $returnArray;
}

答案 3 :(得分:0)

@leuans 的回答很好,但这种轻微的修改更好:

  • 允许在值中包含分隔符
  • 修剪空白
  • 忽略空行
    function getData($file, $separator=":") {
        $data = file($file);
        $returnArray = array();
        foreach($data as $line) {
            $line = trim($line);
            $spos = mb_strpos($line, $separator);
            if($spos !== false){
                $key = trim(mb_substr($line, 0, $spos));
                $value = trim(mb_substr($line, $spos+mb_strlen($separator)));
                $returnArray[$key] = $value;
            }
        }
    
        return $returnArray;
    }