╰ァBy﹎鑫鑫 发表于 2021-7-27 11:27

新手菜鸟php文本处理求助

大佬们我想助理个文本文本里面的内容是
名字:40
名字1:45
名字2:10
等等
我想实现的是如果每次传两个参数,n=名字3&t=10
判断名字是否存在如果在就整行替换,如果不在就在最后一行进行追加写入
但是在判断有没有写入那步怎么搞都不对琢磨了也百度了试了好久特此求助
<?php
$mingzi = filter_input(INPUT_GET, "mingzi") ? filter_input(INPUT_GET, "mingzi") :filter_input(INPUT_GET, "n");
$shijian = filter_input(INPUT_GET, "shijian") ? filter_input(INPUT_GET, "shijian") :filter_input(INPUT_GET, "t");
$content = file_get_contents('sj.txt');
$arr = explode(PHP_EOL, $content);
$str = "";
$tmp = "";
for ($i = 0; $i < count($arr); $i++)
{
$a = strstr($arr[$i],$mingzi);
$str = str_replace($a, $mingzi." : ".$shijian, $arr[$i]);
$str = str_replace(array(PHP_EOL),"", $str);
$tmp .= $str.PHP_EOL;
echo $a;
}
//写入
if ($a == true){
file_put_contents("sj.txt", trim($tmp));
echo "dier1";
}else{
$file = fopen( "./sj.txt", "a" );
fwrite( $file, PHP_EOL.$mingzi." : ".$shijian.PHP_EOL);
fclose( $file );
echo "dier";
}
?>

stu2162583 发表于 2021-7-27 13:11

本帖最后由 stu2162583 于 2021-7-27 13:19 编辑

<?php

$name = $_REQUEST['name'];
$time = $_REQUEST['time'];

if (empty($name) || empty($time)) {
    return;
}

$content = file_get_contents('sj.txt');
$arr = explode(PHP_EOL, $content);

$isExists = false;
if (!empty($arr)) {
    foreach ($arr as $i => $item) {
      // 数据存在覆盖
      if (false !== strpos($item, $name)) {
            $arr[$i] = $name . ':' . $time;
            $isExists = true;
            break;
      }
    }
}
// 不存在,附加到数组最后
if (!$isExists) {
    $arr[] = $name . ':' . $time;
}

file_put_contents('sj.txt', implode(PHP_EOL, $arr));

----------------------------------------------------
张三:12
李四:20

----------------------------------------------------
www.example.com?name=李四&time=22

╰ァBy﹎鑫鑫 发表于 2021-7-27 14:13

stu2162583 发表于 2021-7-27 13:11


非常感谢大佬膜拜

lianyi 发表于 2021-7-29 11:01

本帖最后由 lianyi 于 2021-7-29 11:18 编辑

像这种存储数据不建议用文本的形式存储,建议用mysql,sqlite等数据库存储

<?php

/**
* @var string $n
* @var string $t
*/
extract(array_filter($_REQUEST, function ($v) {
        return is_array($v) ? !empty($v) : $v !== null && trim($v) !== '';
}));
if (!isset($n) || !isset($t))
        exit('参数有误');

$content = @trim(file_get_contents('sj.txt'));

$_name   = preg_quote($n, '/');
$eol   = PHP_EOL;
$content = preg_replace("/(?<=^{$_name}:)\d+(?={$eol}|$)/m", $t, $content, -1, $count);

if ($count < 1)
        file_put_contents('sj.txt', ($content === '' ? '' : $eol) . $n . ':' . $t, LOCK_EX | FILE_APPEND);
else
        file_put_contents('sj.txt', $content, LOCK_EX);

╰ァBy﹎鑫鑫 发表于 2021-7-30 09:19

lianyi 发表于 2021-7-29 11:01
像这种存储数据不建议用文本的形式存储,建议用mysql,sqlite等数据库存储



感谢大佬解答
页: [1]
查看完整版本: 新手菜鸟php文本处理求助