PHP在文本文件中查找一行并删除该行

时间:2018-06-09 20:54:07

标签: php

我有一个文本文件,其中包含一串文本,格式为

纬度经度时间

22.300859182388606 -127.66133104264736 1528577039
22.30103320995603 -127.66234927624464 1528577041
22.300184137952726 -127.661628767848 1528577042
22.29943548054545 -127.66242001950741 1528577045

我给了坐标,我想在文本文件中搜索相同的坐标,如果有,则从文件中删除该行。如何搜索与给定坐标相同的坐标并将其从文件中删除?这是我到目前为止的代码:

<?php
$msg = $_GET["coords"];
$file = 'coordinates.txt';
// Open the file to get existing content
$current = file_get_contents($file);

?>

2 个答案:

答案 0 :(得分:-1)

看起来很有趣,看看你创建的代码。顺便说一句,我通过评论解释道。

假设:

yourfile.php?coords=22.300859182388606 -127.66133104264736

// Assumption : 
// 22.300859182388606 -127.66133104264736
$msg = isset($_GET['coords']) ? $_GET['coords'] : null;

if ($msg) {
    $file = 'coordinates.txt';
    // Change newline into array
    $items = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $new   = [];

    foreach ($items as $key => $item) {
        // Remove time
        // Yep, I see you're using unixtime (10 characters + 1 space)
        $check = substr($item, 0, -11);

        // If $msg === $check, append to $new
        if (strpos($check, $msg) === false) {
            $new[] = $item;
        }
    }

    // If $new has value
    if ($new) {
        // Write file with $new content
        file_put_contents($file, implode("\n", $new));
    }
}

答案 1 :(得分:-1)

一种简单的方法是使用可以搜索坐标的preg_replace和“通配符”(。*)和新行(\ n)。

$txt = file_get_contents("coordinates.txt");

$find = $_GET["coords"];

Echo preg_replace("/". $find . ".*\n/", "", $txt);

在此见到它:
https://3v4l.org/aW14j

这要求用户以正确的顺序输入坐标并将空格分开 通常是逗号空格分隔 您可以使用以下命令修复逗号空间:

$find = str_replace(", ", " ", $_GET["coords"]);

如果用户输入错误的订单可以修复,但它也可以删除您想要保留的行 如果你想要这个,请告诉我,我将添加该代码。