String in Array aufsplitten

Das vom String lesen kannst du vom ersten Beispiel kopieren
PHP:
//Testdaten
$text = <<<TXT
hostname:  Web4f.de [ Countersrike 1.6 - Fun Server ]
         version :  48/1.1.2.7/Stdio 5787 secure  (10)
         tcp/ip  :  178.254.6.180:27015
         map     :  fy_buzzkill at: 0 x, 0 y, 0 z
         players :  1 active (16 max)
         
         #      name userid uniqueid frag time ping loss adr
         # 1 "GuyPrayer" 2 STEAM_0:0:64036919   0 00:22   61   35 91.66.225.231:27005
         1 users
TXT;
 
// Zeilenumbrüche korrigieren
$text = str_replace("\r\n", "\n", $text); # windows -> linux
$text = str_replace("\r", "\n", $text); # mac -> linux
 
//Die Zeilen in einen Array werfen
$lines = explode("\n", $text);

Für den Namen ganz einfach den Namen als Key mitgeben
PHP:
$out[$comb['userid']] = $comb;
 
Das ist eine Api die einen solchen Stuss liefert?
Die userid hat nur ein öffnendes ". Keine Zeilen...

Du kommst da glaub nicht an regulären Ausdrücken vorbei. Und auch dann scheint es Zufall zu sein was wirklich geliefert wird.

HTML:
<html><head></head><body>hostname:  Web4f.de [ Countersrike 1.6 - Fun Server ]
version :  48/1.1.2.7/Stdio 5787 secure
tcp/ip  :  178.254.6.180:27015
map     :  cs_office at: 0 x, 0 y, 0 z
players :  1 active (16 max)

# 	name     	userid 	uniqueid            	frag	time    	ping	loss	adr                  
1 	"GuyPraye	13     	STEAM_0:0:64036919  	0   	02:41   	49  	0   	91.66.225.231:27005  
1 users</body></html>
 
Okay, also ich hab keine AHnung warum das so blöde läuft. Was mach ich nun?

Edit: Habe es nun wie in deinem 1. Posting hinbekommen. Danke ;)
 
Zuletzt bearbeitet:
Hallo, ich muss das Thema nochmal rauskramen. Habe wieder etwas neues, wie gestalte ich das nun bei dieser Ausgabe?

Code:
Currently loaded plugins:
      description      stat pend  file              vers      src  load  unlod
 [ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.8.2    ini  Start ANY  
 [ 2] POD-Bot          RUN   -    podbot_mm_i386.s  v2.6mm    ini  Chlvl ANY  
 [ 3] Fun              RUN   -    fun_amxx_i386.so  v1.8.2    pl1  ANY   ANY    
3 plugins, 3 running

Zb so hier:

PHP:
Array
(
    [0] => array
      (
        [description] => AMX Mod X,
        [stat] => RUN,
        [pend] => -,
        [file] => amxmodx_mm_i386.,
        [vers] => v.1.8.2,
        [src] => ini,
        [load] => Start,
        [unload] => ANY,
      ),
    [1] => array
      (
        [description] => PodBot,
        [stat] => RUN,
        [pend] => -,
        [file] => podbot_mm_i386.s.,
        [vers] => v2.6mm,
        [src] => ini,
        [load] => Chlvl,
        [unload] => ANY,
      ),
    // usw...
)

Danke für Antworten :-O
 
Zuletzt bearbeitet:
Das ist eine "bescheidene" API...
Du musst rausfinden, welche Zeichen dort als Trennzeichen verwendet werden. Wenn du Glück hast sind es Tabulatoren (\t), ansonsten kannst du nur raten (bei Leerzeichen). Nenn uns doch mal die Quelle der Daten. Vielleicht gibt es eine einfachere Möglichkeit als ständiges "Gebastel" mit explode, preg_* und co.
 
Das könnte komplexer werden.
Du musst mittels der 2. Zeile (Spaltennamen) festellen, an welcher Position die Werte sind. Danach kannst du dann die anderen bestimmen. Anders geht es mE nicht.
 
PHP:
<?php

$raw = <<<TXT
 [ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.8.2    ini  Start ANY  
 [ 2] POD-Bot          RUN   -    podbot_mm_i386.s  v2.6mm    ini  Chlvl ANY  
 [ 3] Fun              RUN   -    fun_amxx_i386.so  v1.8.2    pl1  ANY   ANY  
 [ 4] CStrike          RUN   -    cstrike_amxx_i38  v1.8.2    pl1  ANY   ANY  
 [ 5] CSX              RUN   -    csx_amxx_i386.so  v1.8.2    pl1  ANY   ANY  
 [ 6] FakeMeta         RUN   -    fakemeta_amxx_i3  v1.8.2    pl1  ANY   ANY  
 [ 7] Ham Sandwich     RUN   -    hamsandwich_amxx  v1.8.2    pl1  ANY   ANY  
TXT;

$positions = array(6,23,28,34,52,62,67,73);
$lines = explode(PHP_EOL, $raw);
$modules = array();

function explodeLine($line, $positions) {
	$return = array();
	foreach ($positions as $key => $position) {
		$length = isset($positions[$key + 1]) ? $positions[$key + 1] - $position - 1 : 10;
		$return[] = trim(substr($line, $position, $length));
	}
	return $return;
}

foreach ($lines as $line) {
	$modules[] = explodeLine($line, $positions);
}

var_dump($modules);

Positionen sind hardgecodet, wenn die variabel sind musst du die natürlich auch dynamisch auslesen. Falls der letzte Wert (unload) länger als 10 Zeichen sein kann, muss du das auchnoch anpassen (substr 3ter Parameter).
 
Zurück