PHP/Laravel - 从文件中查找并读取 'key-value pair'
PHP/Laravel - find and read 'key-value pair' from file
我想存储一些文本信息,但我不想为此使用数据库。例如有一个文件:
key1: some text information 1
key2: some text information 2
key3: another text information
我想知道,使用 PHP 或 Laravel 从该文件中找到一个特定值的最短方法是什么?
我可以使用 foreach(file('yourfile.txt') as $line) {}
循环将文本行存储到数组中,然后找到具有特定键的行,但也许有更短或更好的方法来做到这一点。
如果所有行的格式相同([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;
}
我认为你应该使用数组而不是文本文件
在 app/config 目录中创建一个新文件。我们称它为 constants.php
在那里你必须return一组配置值。
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');
@leuans 回答是以下功能的基础,它对我来说效果更好,因为它还去除换行符并使分隔符可配置。
//
// 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;
}
@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;
}
您可以使用函数parse_ini_file
它将 name/value 对的文件读取到一个数组中,以便可以轻松访问它们,例如:
$ini = parse_ini_file("data.ini");
$value = $ini['key1'];
data.ini 可以是这样的:
; This is a comment
key1=value1
我想存储一些文本信息,但我不想为此使用数据库。例如有一个文件:
key1: some text information 1
key2: some text information 2
key3: another text information
我想知道,使用 PHP 或 Laravel 从该文件中找到一个特定值的最短方法是什么?
我可以使用 foreach(file('yourfile.txt') as $line) {}
循环将文本行存储到数组中,然后找到具有特定键的行,但也许有更短或更好的方法来做到这一点。
如果所有行的格式相同([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;
}
我认为你应该使用数组而不是文本文件
在 app/config 目录中创建一个新文件。我们称它为 constants.php
在那里你必须return一组配置值。
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');
@leuans 回答是以下功能的基础,它对我来说效果更好,因为它还去除换行符并使分隔符可配置。
//
// 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;
}
@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;
}
您可以使用函数parse_ini_file
它将 name/value 对的文件读取到一个数组中,以便可以轻松访问它们,例如:
$ini = parse_ini_file("data.ini");
$value = $ini['key1'];
data.ini 可以是这样的:
; This is a comment
key1=value1