2010-12-02 10 views
4

ich eine Zeichenfolge in PHP bin Parsen, die das folgende MusterWie teilt man eine Zeichenkette durch Leerzeichen, Zahlen und Anführungszeichen in PHP auf?

VARIABLE Key1 Value1 Key2 Value2 Key3 Value3 ... 

ähnlich wie hat:

JOBGRADE 'P' 'Parttime Employee' 'C' 'Customer Support' 

ODER

SOMEVARIABLE 1 "Value1" 2 'Value2' 

Diese Zeile beginnt mit einem String ohne Anführungszeichen und Single oder doppelt zitierte Strings und/oder Zahlen. Es kann ein bis mehrere Schlüsselwertpaare haben.

Ich brauche die Zeichenfolge auf 2 Arten aufteilen:

Die erste, den String ohne Anführungszeichen zu erhalten, die nicht numerisch ist.

Der zweite den numerischen Wert und/oder Strings in Anführungszeichen zu extrahieren - Einzel- oder ich brauche dobule sein kann

So

  1. JOBGRADE
  2. P: Teilzeitmitarbeiter
  3. C: Support Kunden

OR

  1. somevariable
  2. 1: Value1
  3. 2: Value2

Meine Gedanken:

Ich dachte an die Zeichenfolge Aufspalten und Iterieren durch sie zu testen:

für 1: Wenn der Wert nicht numerisch und nicht in Anführungszeichen steht, ist dies der Variablenname

für 2+: Nicht sicher die einfache Möglichkeit, dies zu tun, weil ich den Unterschied zwischen den Schlüsseln und Werten erkennen müssen:

Frage:

Wie kann ich zwischen dem Schlüssel/Wert unterscheiden?

Antwort

11

Behandeln Sie es als CSV, und durchlaufen Sie es, um es zu teilen. Die Variable ist [0], Tasten sind ungerade ab [1], Werte sogar von [2].

var_dump(str_getcsv("JOBGRADE 'P' 'Parttime Employee' 'C' 'Customer Support'", 
    ' ', "'")); 
array(5) { 
    [0]=> 
    string(8) "JOBGRADE" 
    [1]=> 
    string(1) "P" 
    [2]=> 
    string(17) "Parttime Employee" 
    [3]=> 
    string(1) "C" 
    [4]=> 
    string(16) "Customer Support" 
} 
+0

danken Ihnen zu resultierende - große Lösung. Ich habe nie darüber nachgedacht, CSV zu verwenden. –

1

erster Gebrauch() auf dem variablen String explodiert alle Teile durch ein Leerzeichen getrennt werden: http://php.net/manual/en/function.explode.php

$variables = explode("JOBGRADE 'P' 'Parttime Employee' 'C' 'Customer Support'", ' '); 

// i nicht das erste Element verwenden würde so entfernen Sie es, behalten Sie als Titel für später

$var_name = array_shift($variables); 
zweitens

// Schleife über die Elemente (Schritt 2), und fügen Sie den Schlüssel Array & Wert

$result = array(); 

for ($i = 0; $i < count($variables); $i = $i +2) { 
    $result[$variables[$i]] = $variables[$i + 1]; 
} 

print_r($result); 
Verwandte Themen