String teilen ?

Lila Pirat

Grünschnabel
Hallo,bin Relativer PHP anfänger.
Brauche aber eine Seite in der ich folgenden String zerlege.

Angriffsbericht
vom: 12.08.2005 15:01:10
Spionage erfolgreich!
Einheiten des Angreifers: B 002 Jack Sparrow/4 (9:48:23)
Einheit: Anzahl(Verluste)
Pinasse: 1 (1)

Einheiten des Verteidigers: Berliner Insel (13:100:13)
Einheit: Anzahl(Verluste)
Sklave: 335 (30)
Rapierträger: 329 (1)
Musketiere: 242 (222)
Kanoniere: 4 (8)
Kriegs-Fregatte: 68 (12)
Fregatte: 10 (0)
Karavelle: 10 (1)
Pinasse: 3 (0)
Gebäude
Rathaus: 17
Goldmine: 25
Steinbruch: 20
Sägewerk: 20
Farm: 15
Waffenschmiede: 18
Kaserne: 18
Werft: 18
Vorratslager: 19
Stadtmauer: 24
Friedhof: 1
Forschungen:
Rapier: 10
Rüstung: 10
Muskete: 10
Kanone: 10
Laderaum: 0
Rohstoffe
Gold: 7957
Stein: 22654
Holz: 7584
Nahrung: 14083

Hier muss jetzt zerlegt werden ab Sklave.
Ich brauche davon die Zahl vor der in der Klammer und die danach.
Die Werte hinter den Gebäuden brauche ich auch.
Das heist doch wohl die müssen in ein Array gepackt werden und dann getrennt werden oder ?
Wen ja wie mache ich das an dieser Stelle ?

Code:
  $avar = preg_split("/[() \n\t.!?]+/", $str);
  $len = count($avar);
  for ($i=0; $i<$len; $i++)
    printf("%d: %s<br>\n", $i, $avar[$i]);
  echo "Teste Variable : ";
  echo $avar[47];

Ja hiermit,allerdings habe ich das Problem das es sein kann das die ein oder andere Zeile nicht vorhanden ist.
Somit fällt das eigentlich ja flach oder ?

thx für die Hilfe

mfg Lila !
 
Zuletzt bearbeitet:
Sorry !

Geht nicht heist in dem Fall keinerlei Ausgabe gar nichts.

Code:
<?

  $str = "Angriffsbericht
vom: 12.08.2005 15:01:10
Spionage erfolgreich!
Einheiten des Angreifers: B 002 Jack Sparrow/4 (9:48:23)
Einheit: Anzahl(Verluste)
Pinasse: 1 (1)

Einheiten des Verteidigers: Berliner Insel (13:100:13)
Einheit: Anzahl(Verluste)
Sklave: 335 (0)
Rapierträger: 329 (0)
Musketiere: 242 (0)
Kanoniere: 4 (0)
Kriegs-Fregatte: 68 (0)
Fregatte: 10 (0)
Karavelle: 10 (0)
Pinasse: 3 (0)
Gebäude
Rathaus: 17
Goldmine: 25
Steinbruch: 20
Sägewerk: 20
Farm: 15
Waffenschmiede: 18
Kaserne: 18
Werft: 18
Vorratslager: 19
Stadtmauer: 24
Friedhof: 1
Forschungen:
Rapier: 10
Rüstung: 10
Muskete: 10
Kanone: 10
Laderaum: 0
Rohstoffe
Gold: 7957
Stein: 22654
Holz: 7584
Nahrung: 14083";
  $avar = preg_split("/\n/", $str);
  $len = count($avar);
  for ($i=0; $i<$len; $i++)
    printf("%d: %s<br>\n", $i, $avar[$i]);

$scanned = sscanf($avar[i], "Sklave: %d (%d)"); 
print_r($scanned); 

?>
mfg Lila !
 
Zuletzt bearbeitet:
Da ich leider von REGEX wenig Ahnung habe, würde ich das so machen:
PHP:
<?php
    // $str = deine Stringvariable
    $expl = explode("(Verluste)",$str);
    echo nl2br(trim($expl[2]));
?>
 
Gott ...

Nehmen wir an die Auflistung befindet sich in einem Array, jede Zeile ist ein Element des Arrays:

PHP:
$array = Array(
  "Angriffsbericht", 
  "vom: 12.08.2005 15:01:10", 
  "Spionage erfolgreich!", 
  "Einheiten des Angreifers: B 002 Jack Sparrow/4 (9:48:23)", 
  "Einheit: Anzahl(Verluste)", 
  "Pinasse: 1 (1)", 
  "usw.");
for($i=0;$i<count($array);$i++) {
  if(strpos($array[$i], 'Sklave')) {
    $scanned = sscanf($array[$i], "Sklave: %d (%d)");
    break;
  }
}
print_r($scanned);
Wenn du nicht weißt wie man PHP arbeitet schreib nicht rein "geht nicht" - sondern "Ich versteh es nicht".
 
Naja habe es jetzt anderst gelöst !

Code:
function del_earr($arr) {
	$narr = array();
	$narr1 = array();
	
	foreach($arr as $value) {
		$value = trim($value);
        if(!empty($value)) $narr[] = $value;
	}
	
	foreach($narr as $value) {
		$varr = explode(": ", $value);
		$varr1 = explode(" ", $varr[1]);
		
		$narr1[strtolower($varr[0])] = $varr1[0];
	}
	
	return $narr1;
}


function parse_report($report) {
	global $spyheader, $attack, $defense, $buildings, $research, $resources;
	
    $rep = array("Gebäude", "Forschungen:", "Rohstoffe");

    $report = str_replace($rep, "___---___", $report);

    $parr = array("/Einheiten des Angreifers: (.*?)\n/i", "/Einheiten des Verteidigers: (.*?)\n/i");

    $report = preg_replace($parr, "___---___\n", $report);

    $report = str_replace("Einheit: Anzahl(Verluste)", "", $report);

    $rarr = explode("___---___", $report);

    $spyheader = $rarr[0];
    $attack = del_earr(explode("\n", $rarr[1]));
    $defense = del_earr(explode("\n", $rarr[2]));
    $buildings = del_earr(explode("\n", $rarr[3]));
    $research = del_earr(explode("\n", $rarr[4]));
    $resources = del_earr(explode("\n", $rarr[5]));
}

So wird mir das in einem Ordentlichen teil aufgezeigt und ich kann die Werte alle einzeln ansprechen.

Danke für die Hilfestellung !

mfg
 
Zurück