2017-08-24 78 views
3

我對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。

+0

你需要一個正則表達式來分割你的數據線,但一個更好的解決辦法是將使用一個數據庫或一個已知的/被證實的格式,例如json。 – jeroen

+0

你會得到什麼樣的錯誤? – Tomasz

+0

不知道如何創建'top.txt',但如果可能,請更改該保存代碼並另存爲JSON。這將簡化和緩解你的一切。 –

回答

1

您需要正則表達式:-)

<?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"; 
} 

在正則表達式,我們有#分隔符,然後找東西引號之間。使用(?PATTERN)爲您提供一個命名的捕獲組。第一個查找字母等,只有第二個數字。

看到這裏瞭解正則表達式是如何匹配的! https://regex101.com/r/023LlL/1/

在這裏看到它在行動https://3v4l.org/qDVuf

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

這裏是演示鏈接:https://3v4l.org/ih1P7