读取文件并获取特定行如何

时间:2015-03-07 22:23:07

标签: php

我有一个问题,我想从文件中读取并使用和获取文件的某些部分,如下所示。这是文件内部的内容,但我想获取名称。我的服务器使用此文件,如果播放器登录服务器,则名称列表会变大。但我不知道如何做到这一点......我真的想知道如何做到这一点。

我已经通过爆炸第一个角色来尝试自己,但这就是我的知识达到了多远。

非常感谢能帮助我的人。

Players online: NAME1, NAME2, NAME3, NAME4, NAME5, NAME6, ETC, ETC. Total: 4

3 个答案:

答案 0 :(得分:0)

$s = 'Players online: Admin Wouter, Krachtpatser, Dark Warrior, Anneleen. Total: 4';
// or read from the players file:
//$s = file_get_contents('path_to_players_file');

$s = str_replace('Players online: ', '', $s);
$stringPlayers = substr($s, 0, strrpos($s, '. Total:'));

echo $stringPlayers; // displays: Admin Wouter, Krachtpatser, Dark Warrior, Anneleen

// now get the player names in an array:

$arrayPlayers = explode(',', $stringPlayers);
foreach ($arrayPlayers as $k => $name) {
    $arrayPlayers[$k] = trim($name);
}

echo '<pre>';
print_r($arrayPlayers);
echo '</pre>';

/* Displays:
    Array
    (
        [0] => Admin Wouter
        [1] => Krachtpatser
        [2] => Dark Warrior
        [3] => Anneleen
    )
*/

答案 1 :(得分:0)

您可以使用strpos()搜索:字符的第一次出现和Total:的位置,然后使用substr()从字符串中删除这些不需要的部分。然后,您可以在每个,字符上拆分字符串以获取名称数组。请注意,名称将包含空格,因此我们可以将array_walk()trim()结合使用以删除这些:

// get the contents of your file
$data = file_get_contents('file.txt');
// get position of first ':' character
$pos1 = strpos($data, ':');
// get position of 'Total:'
$pos2 = strrpos($data, 'Total:');
// remove these parts using `substr()`
$data = substr($data, $pos1+1, ($pos2 - 1) - $pos1);
// split the string on each ',' character
$array = explode(",", $data);
// remove any whitespaces from the start and end
array_walk($array, function(&$value, $key) {
   $value = trim($value);
});
// array now contains
Array
(
  [0] => Admin Wouter
  [1] => Krachtpatser
  [2] => Dark Warrior
  [3] => Anneleen.
)

确保您没有任何落后行为。&#39;在名称之后,您可以像这样修改array_walk()回调:

array_walk($array, function(&$value, $key) {
  // trim whitespaces
  $value = trim($value);
  // trim trailing '.' characters
  $value = rtrim($value, '.');
});

答案 2 :(得分:0)

你可以尝试一下:

$line = 'layers online: NAME1, NAME2, NAME3, NAME4, NAME5, NAME6, ETC, ETC. Total: 4';
$pattern = '/:(.*)[,.]/';

preg_match($pattern, $line, $matches);
$names = explode(',', $matches[1]);

print_r($names);