我故意想用文本文件来做这件事。所以我读了一个文本文件,我想检查该文本文件中是否已经存在用户名,如果他不存在,我想将该用户名添加到文本文件中,或者只是将点添加给他。
我目前的代码:
<?php
$myfile = fopen("test.txt", "r") or die("Unable to open file!");
$file = fread($myfile,filesize("test.txt"));
//echo $file;
fclose($myfile);
//$username = $_REQUEST['username'];
//$points = $_REQUEST['point'];
$username = 'chinmay'; //chinmay is a username this is unique
$points = 200; //if username chinmay not exitst then Insert first time otherwise if username chimay exist then next onwards this point will update everytime in the text file.
$myfileWrite = fopen("test.txt", "a") or die("Unable to open file!");
$txt = $username."|".$points."\n";
fwrite($myfileWrite, $txt);
fclose($myfileWrite);
?>
的test.txt:
chinmay|800
john|200
sanjib|480
debasish|541
这是我的完整代码。我的要求是:
\n
无效。我用谷歌搜索了2个小时,但没有得到任何解决方案。我不知道这个问题。
答案 0 :(得分:2)
这应该适合你:
首先使用file()
将文件读入数组。然后,您可以使用array_map()
遍历每一行,explode()
将其作为分隔符|
。在此之后,您可以使用array_column()
获取用户名作为值的关键值。像这样:
Array
(
[chinmay] => 1200
[john] => 200
[sanjib] => 480
[debasish] => 541
[chinmayx] => 200
)
使用数组,您只需检查用户名是否已存在。如果没有将它添加到数组中,然后将点添加到它。
将点数添加到用户名后,您可以使用相同的格式更改数据,并使用file_put_contents()
保存。
完整代码:
<?php
$lines = file("test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$usernames = array_column(array_map(function($v){
return explode("|", $v);
}, $lines), 1, 0);
$username = "chinmayx";
$points = 200;
if(!isset($usernames[$username]))
$usernames[$username] = 0;
$usernames[$username] += $points;
foreach($usernames as $k => $v)
$data[] = "$k|$v" . PHP_EOL;
file_put_contents("test.txt", $data);
?>
修改强>
如果您的PHP低于5.5,则只需替换:
$usernames = array_column(array_map(function($v){
return explode("|", $v);
}, $lines), 1, 0);
用这个:
$lines = array_map(function($v){
return explode("|", $v);
}, $lines);
$usernames = array_combine(
array_map(function($v){
return $v[0];
}, $lines),
array_map(function($v){
return $v[1];
}, $lines)
);
此外,如果您想获得前十名用户,只需rsort()
您的阵列,然后选择前10个元素中的array_slice()
,例如
rsort($usernames);
$topUsers = array_slice($usernames, 0, 10);
print_r($topUsers);
答案 1 :(得分:0)
你应该使用PHP_EOL而不是&#34; \ n&#34;这也取决于你的操作系统
$txt = $username."|".$points.PHP_EOL;
用于检查userName,只需使用:
//this works because $file is String because of fread()
if (strpos($file,$username) !== false) {
echo 'user exists';
}
替换你需要正则表达式或使用strpos位置(它返回字符串中name的位置)并按指数($ username)+1推进指针并从那里搜索换行符,这之间的所有字符串,用新点替换
答案 2 :(得分:0)
要使\ n正常工作,请使用另一个答案中的PHP_EOL
$txt = $username."|".$points.PHP_EOL;
要更新文本文件中的用户,请通过以下链接
答案 3 :(得分:0)
尝试使用preg_match:
$file = fopen("score.txt", "r");
while (!feof($file)) {
preg_match("/^$username|(.*?)$/", $file, $array);
var_dump($array);
}
但我认为使用MySQL会更好:)