Hallo, ich habe ein problem:
ich habe aus einem online-game die statistik der top 100 spieler ausgeles aus einem text, der ungefähr so aussieht:
1 Belgarion Write message Ghosts 583
2 Veri Write message CoE 515
3 Unknown Write message Unknown 510
4 E ZY Write message CoE 486
5 c00kies4every1 Write message Corrupt 471
klappt alles wunderbar, nur das problem ist, wenn ein spieler einen bindestrich im namen hat (wie zb ich), wird der name einfach übergangen und nicht ausgewertet. ich kann mir da keinen reim drauf machen...
vielleicht kann mir ja einer von euch helfen...
ich habe aus einem online-game die statistik der top 100 spieler ausgeles aus einem text, der ungefähr so aussieht:
1 Belgarion Write message Ghosts 583
2 Veri Write message CoE 515
3 Unknown Write message Unknown 510
4 E ZY Write message CoE 486
5 c00kies4every1 Write message Corrupt 471
klappt alles wunderbar, nur das problem ist, wenn ein spieler einen bindestrich im namen hat (wie zb ich), wird der name einfach übergangen und nicht ausgewertet. ich kann mir da keinen reim drauf machen...
PHP Code:
/**
* konvertiert einen beliebigen string der o.g. form in ein array.
* @param $string string
*/
function messageToArray($string) {
$arr = explode("\n",$string); // zeilen splitten
$arr = array_map('trim',$arr); // leerzeichen vorher und nachher wegmachen
$arr = array_filter($arr,'notEmpty'); // alle leeren zeilen filtern
$result = array();
foreach ($arr as $v) {
$matches = array();
$chk = preg_match('/([0-9]+)\s+(.+)(Write message)\s+(.+)\s+([0-9]+)/i',$v,$matches);
if(!$chk) { // kein match, mit nächstem array-element weitermachen.
continue;
}
// explizites typ-casting, um vergleichen mit === standzuhalten.
$result[] = array(
(int)$matches[1],
trim($matches[2]),
trim($matches[4]),
(int)$matches[5]);
}
return $result;
}
/**
* hilfsfunktion für messageToArray()
*/
function notEmpty($str) {
return !empty($str);
}
// ausführen und testen der funktion.
// teststring aufbauen.
$str = '
1 Belgarion Write message Ghosts 583
2 Veri Write message CoE 515
3 Unknown Write message Unknown 510
4 E ZY Write message CoE 486
5 c00kies4every1 Write message Corrupt 471 ';
// was anhand des teststrings erwartet ist.
$expected = array(
array(1,'Belgarion','Ghosts',583),
array(2,'Veri','CoE',515),
array(3,'Unknown','Unknown',510),
array(4,'E ZY','CoE',486),
array(5,'c00kies4every1','Corrupt',471),
);
$testResult = messageToArray($str);
// testen der funktionen
if ($testResult === $expected) {
echo 'test passed ... ';
} else {
echo 'test failed ... ';
echo '<pre>result: ' ."\n\n".
print_r($testResult,true) . '<hr/>expected: ' ."\n\n".
print_r($expected,true) . '<hr/></pre>';
}
vielleicht kann mir ja einer von euch helfen...
Comment