如何从PHP中的文件数组中放入特定字符串?

时间:2016-07-23 14:40:45

标签: php

嗨,我已经做了这个项目近一个月了。无论如何我可以在搜索到的字符串列表中存储下一个字符串的值吗?

例如:

Deviceid.txt内容为:

Created:21/07/2016 1:50:53; Lat:30.037853; Lng:31.113798; Altitude:79; Speed:0; Course:338; Type:Gps;
Created:21/07/2016 1:49:53; Lat:30.037863; Lng:31.113733; Altitude:60; Speed:0; Course:338; Type:Gps;

这是我的示例php编码

$file_handle = fopen("data/deviceid.txt", "r");
while (!feof($file_handle)) {
    $line = fgets($file_handle);
    array_push($a,$line);
}

$searchword = 'Lat';
$matches = array_filter($a, function($var) use ($searchword) {
        return preg_match("/\b$searchword\b/i", $var);
    });
print_r($matches);
fclose($file_handle);

匹配数据: [0] = 30.037853 [1] = 30.037863

3 个答案:

答案 0 :(得分:1)

使用下面的代码解析文件后,您可以使用array_column(php v5.5.0 +)从特定键获取所有值,如下所示:

array_column($parsed, 'Lat');

输出:

Array
(
    [0] => 30.037853
    [1] => 30.037863
)

在行动here中查看。

以下是解析文件内容的代码:

// $a = each line of the file, just like you're doing

$a = array_filter($a); // remove empty lines

$parsed = array();

foreach($a as $v1){
    $a1 = explode(';', $v1);
    $tmp = array();
    foreach($a1 as $v2){
        $t2 = explode(':', $v2);
        if(count($t2) > 1){
            $tmp[trim(array_shift($t2))] = trim(  implode(':', $t2)  );
        }
    }
    $parsed[] = $tmp;
}

这是$parsed

的结构
Array
(
    [0] => Array
        (
            [Created] => 21/07/2016 1:50:53
            [Lat] => 30.037853
            [Lng] => 31.113798
            [Altitude] => 79
            [Speed] => 0
            [Course] => 338
            [Type] => Gps
        )

    [1] => Array
        (
            [Created] => 21/07/2016 1:49:53
            [Lat] => 30.037863
            [Lng] => 31.113733
            [Altitude] => 60
            [Speed] => 0
            [Course] => 338
            [Type] => Gps
        )

)

请参阅操作中的代码here

答案 1 :(得分:0)

我编写了一个快速正则表达式,可以帮助您从每一行中提取字段名称和值。

你可以试试这个:

$re = "/((?P<fieldname>[^\\:]*)\\:(?P<fieldvalue>[^\\;]*); *)/"; 
$str = "Created:21/07/2016 1:50:53; Lat:30.037853; Lng:31.113798; Altitude:79; Speed:0; Course:338; Type:Gps;"; 

preg_match_all($re, $str, $matches);

print_r $matches来检查结果。

希望这有帮助。

答案 2 :(得分:0)

array_filter之后,迭代您的匹配并对每一行应用更具体的正则表达式:

$lats = array();
foreach ($matches as $line)
{
    $match = array();
    preg_match("/\b$searchword:([\d\.]+);/i", $var, $match); 
    $lats[] = $match[1];
}
print_r($lats);

变量$match将使用索引0 and the parenthesized match at index 1处的完整正则表达式匹配来填充。