php从文本文件中检索数据

时间:2013-06-30 15:29:32

标签: php

想象一下,我有一个像这样的文本文件:

 Welcome to the text file!
 -------------------------
 Description1: value1
 Description2: value2
 Description containing spaces: value containing spaces
 Description3: value3

将这些数据存储到文本文件中很容易,如下所示:

 $file = 'data/preciousdata.txt';
 // The new data to add to the file
 $put = $somedescription .": ". $somevalue;
 // Write the contents to the file, 
 file_put_contents($file, $put, FILE_APPEND | LOCK_EX);

每次写信时都会有不同的描述和值。

现在我想读取数据,所以你会得到文件:

 $myFile = "data/preciousdata.txt";
 $lines = file($myFile);//file in to an array

假设我刚刚在文本文件中写了“color:blue”和“taste:spicy”。我不知道它们是哪一行,我想检索“color:”描述的值。

修改 我应该让php“搜索”文件,返回包含“description”的行号,然后将该行放在一个字符串中并删除“:”的所有内容?

4 个答案:

答案 0 :(得分:7)

通过爆炸,您可以创建一个数组,其中包含“描述”作为键,“值”作为值。

$myFile = "data.txt";
$lines = file($myFile);//file in to an array
var_dump($lines);

unset($lines[0]);
unset($lines[1]); // we do not need these lines.

foreach($lines as $line) 
{
    $var = explode(':', $line, 2);
    $arr[$var[0]] = $var[1];
}

print_r($arr);

答案 1 :(得分:1)

我不知道您希望以后如何使用这些值。您可以将数据加载到关联数组中,其中的描述是键:

// iterate through array
foreach($lines as $row) {
    // check if the format of this row is correct
    if(preg_match('/^([^:]*): (.*)$/', $row, $matches)) {
        // get matched data - key and value
        $data[$matches[1]] = $matches[2];
    }
}
var_dump($data);

请注意,此代码允许您使用冒号获取值。

如果您不确定描述是否唯一,则可以将值存储为数组:

// iterate through array
foreach($lines as $row) {
    // check if the format of this row is correct
    if(preg_match('/^([^:]*): (.*)$/', $row, $matches)) {
        // get matched data - key and value
        $data[$matches[1]][] = $matches[2];
    }
}
var_dump($data);

这可以防止覆盖先前解析的数据。

答案 2 :(得分:0)

由于$ lines是一个数组,你应该循环查找“:”并将该行分成两行:description和value。

然后:

<?php
$variables = array();
unset($lines[0]); //Description line
unset($lines[1]); //-------

foreach ($lines as $line) {
    $tempArray = explode( ": ", $line ); //Note the space after the ":", because
                                           values are stored with this format.
    $variables[$tempArray[0]] = $tempArray[1];
}
?>

你在变量中有一个数组,其键是描述,值是你的值。

答案 3 :(得分:0)

您可以使用正则表达式来分割行并在“:”之后检索parte,或者只是使用explodecommand返回由每个“:”分隔的字符串数组,例如:

foreach ($lines as $line_num => $line) {
    $split_line = explode(":", $line);
    // echo the sencond part of thr string after the first ":"
    echo($split_line[1])
    // also remove spaces arounfd your string
    echo(trim($split_line[1]));
}