String Spliiten

mmueller-87

Mitglied
Hallo,

habe ein großen Denkfehler wonach ich nun eure Hilfe brauche. Ich habe ein String:

Code:
  Filename: basevotes.smx
  Title: Basic Votes (Basic Vote Commands)
  Author: AlliedModders LLC
  Version: 1.4.7
  URL: http://www.sourcemod.net/
  Status: running
  Reloads: Map Change if Updated
  Timestamp: 02/06/2013 17:50:52
  Hash: 82bc40877547aebe81185cba6417690e

Diese möchte ich so in einem Array haben:

Code:
Array
(
    [Filename] => basevotes.smx,
    [Title] => Basic Votes (Basic Vote Commands),
    [Author] => AlliedModders LLC,
    [Version] => 1.4.7,
    [URL] => http://www.sourcemod.net/,
    [Status] => running,
    [Reloads] => Map Change if Updated,
    [Timestamp] => 02/06/2013 17:50:52,
    [Hash] => 82bc40877547aebe81185cba6417690e,
)

Nun habe ich diesen Ansatz der zwar funktioniert, aber umständlich ist und nicht so, wie ich es gerne hätte:

PHP:
<?php
  $data = 'Filename: basevotes.smx
  Title: Basic Votes (Basic Vote Commands)
  Author: AlliedModders LLC
  Version: 1.4.7
  URL: http://www.sourcemod.net/
  Status: running
  Reloads: Map Change if Updated
  Timestamp: 02/06/2013 17:50:52
  Hash: 82bc40877547aebe81185cba6417690e';
  
  
  
  $exPlugins = explode("\n", $data);
  foreach ($exPlugins as $Key => $Plugins) {
    $SourcemodPlugins[] = explode(": ", $Plugins);
  }
?>

Aber irgendwie komme ich nicht auf das Ergebnis. Ich sehe da nicht mehr durch. Kann mir einer helfen?
 
Der Ansatz ist gut. Ausser dass du den schlüssel nicht setzt und dafür als Value wieder einen Array setzt

PHP:
  foreach ($exPlugins as $Plugins) {
    list($key, $value) = explode(": ", $Plugins);
    $SourcemodPlugins[$key] = $value;
  }
 
Danke dir, hat super funktioniert. Da ich nun mehere Ausgaben habe mit verschiedenem Inhalt konnte ich es dank dir anpassen. Aber nun mal eine andere Frage, wie kann ich bei:

Code:
Title: Basic Votes (Basic Vote Commands)

alles was in der Klammer steht, entfernen? Denn wenn ich es so mache:

PHP:
<?php
function SourceModPluginsSplit($PluginData) {
      $exPlugins = explode("\n", $PluginData);
      foreach ($exPlugins as $Plugins) {
        list($Key, $Value) = explode(": ", $Plugins);
        $SourcemodPlugins[trim($Key)] = substr($Value, 0, strpos($Value, "("));
      } array_pop($SourcemodPlugins);
     return $SourcemodPlugins;
    }
?>

Schmeißt er gleich alles weg was hinter dem Namen (Title) kommt.
 
Bei einer Abwandlung schon:
PHP:
$string = "ABC (Tes(a)t1)";
echo preg_replace("/\(((?>[^()]+)|(?R))*\)/","",$string); // 'ABC '
Dieses Feature ist allerdings nicht in allen System für RegExps vorhanden.
In PHP ist allerdings eine Funktionalität für rekursive Muster enthalten: PHP: Recursive patterns

Mensch vielen vielen dank ! Daran habe ich gar nicht gedacht. Kennt ihr gute Tutorials für RegEx im Umgang mit PHP?
 
Könnt ihr mir vieleicht sagen, wie ich mit einem RegEx nur folgende Zeichen in einem String erlauben darf:
Code:
[ ] . : -_ # A-Za-z 0-9

Irgendwie sehe ich da nicht zurecht... *Kopfschmerzen
 
Zurück