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

PHP在文本文件中查找一行并删除该行,php,Php,我有一个文本文件,包含一堆文本行,格式为 经纬度时间 22.300859182388606 -127.66133104264736 1528577039 22.30103320995603 -127.66234927624464 1528577041 22.300184137952726 -127.661628767848 1528577042 22.29943548054545 -127.66242001950741 1528577045 我得到了坐标,我想在文本文件中搜索相同的坐标,如果有

我有一个文本文件,包含一堆文本行,格式为

经纬度时间

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);

?>

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

假设:

yourfile.php?coords=22.300859182388606-127.661330104264736

// 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));
    }
}

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

在此处查看它的实际操作:

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

$find = str_replace(", ", " ", $_GET["coords"]);
如果用户按错误的顺序键入,则可以修复,但也可以删除要保留的行。

如果您需要,请告诉我,我会添加代码。

您在尝试什么吗?您可以使用
file
而不是
file\u获取内容
,然后迭代每一行,看看是否匹配。@NigelRen str\u replace不起作用,因为我只获得了坐标,而没有时间。如果我在文件的第一行使用str_replace,它只会删除坐标,而不会删除包括时间在内的整行。这也是使用DBs的原因。使用DB会更容易。在另一个问题中还有其他选项,包括
file()
和流式版本。如果您循环了strrpos的结果,您的代码将更加高效。你现在做这件事的方式是,你必须看每一行。你为什么要取消时间?不必要而且需要时间。是的,这是因为比
preg\u match()
更快。在这里您可以找到平均性能。你的密码和我的密码。假设你有成千上万的数据,没有必要去想象。一个简单的测试就可以了。此外,3v4l的时间不值得信任,请改用微时间。您的代码在两个方面是不正确的,您有一个OP并没有的项数组,您的var_转储了这个数组,而您并没有使它成为字符串。与苹果相比,苹果和一个更大的样本,正如你自己所说,这是相当明显的性能,我同意。。。我没有使用
文件获取内容()。我使用
file()
并将返回一个数组:)而不是通过魔法。您认为file()如何创建数组?
$find = str_replace(", ", " ", $_GET["coords"]);