读取失败,带空格

时间:2017-08-24 10:01:44

标签: php readfile

我是PHP新手,想学习。我想为我的服务器做一个顶级列表,但我有一个问题。我的文件是这样构建的:

“姓名”“杀死”

"^0user1^7" "2"
"user2" "2"
"user3" "6"
"user with spaces" "91"

但是如果我想用PHP阅读它会失败,因为用户有空格。 这是我用来读取文件的方法:

$lines = file('top.txt');
foreach ($lines as $line) {
    $parts = explode(' ', $line);
    echo isset($parts[0]) ? $parts[0] : 'N/A' ;
}

也许有人知道更好的方法,因为这不能很好地运作:D。

3 个答案:

答案 0 :(得分:1)

你需要REGEX: - )

<?php

$lines = array(
    '"^0user1^7" "2"',
    '"user2" "2"',
    '"user3" "6"',
    '"user with spaces" "91"',
);

$regex = '#"(?<user>[a-zA-Z0-9\^\s]+)"\s"(?<num>\d+)"#';

foreach ($lines as $line) {
    preg_match($regex, $line, $matches);
    echo 'user = '.$matches['user'].', num = '.$matches['num']."\n";
}

在正则表达式中,我们有#delimiters,然后查找引号之间的东西。使用(?PATTERN)为您提供命名的捕获组。第一个查找字母等,仅查找第二个数字。

请看这里了解正则表达式是如何匹配的! https://regex101.com/r/023LlL/1/

在此处查看https://3v4l.org/qDVuf

答案 1 :(得分:0)

对于您的流程,这可能会有所帮助

$lines = file('top.txt');
$line = explode(PHP_EOL, $lines); // this will split file content line by line
foreach ($line as $key=>$value_line ) {
    echo str_replace(" ","",$value_line);
}

答案 2 :(得分:0)

正如我上面评论的,下面是一个使用JSON的简单示例。

假设您已经存储了JSON格式的记录:

$json = '{
 "user1": "12",
 "sad sad":"23"
}';

$decoded = json_decode($json);
foreach($decoded as $key => $value){
    echo 'Key: ' . $key . ' And value is ' . $value;
}

以下是演示链接:Explicit Dependencies Principle