2010-12-02 17 views
4

次のパターンを持つPHPの文字列を解析しています。PHPでスペース、数字、引用符で文字列を分割するには?

VARIABLE Key1 Value1 Key2 Value2 Key3 Value3 ... 

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

OR

SOMEVARIABLE 1 "Value1" 2 'Value2' 

この行は引用符で囲まれていない文字列で始まり、二重引用符で囲まれた文字列および/または数字。これは、1対複数のキー値ペアを持つことができます。

2つの方法で文字列を分割する必要があります。

数値ではない引用符で囲まれていない文字列を最初に取得します。

数値および/または引用符で囲まれた文字列を抽出する第二 - 単一であってもよく、またはdobule

したがって、私必要

  1. JOBGRADE
  2. P:非常勤従業員
  3. C:カスタマーサポート

OR

  1. SOMEVARIABLE
  2. 1:値1
  3. 2:値2

私の考えを:

私は、文字列を分割して反復処理について考えましたそれはテストするために:

for 1:値が数値ではなく引用符で囲まれていない場合、変数名は

for 2+:簡単な方法はわかりません。値:

質問

どのようにキー/値を区別できますか?

答えて

11

これをCSVとして扱い、それを反復して分割します。変数は[0]であり、キーは[1]から始まり、値は[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

を追加ありがとう - 優れたソリューションを。私はCSVの使用について考えたことはありません。 –

1

最初の使用1つのスペースで区切られたすべての部分を取得する文字列変数に)(爆発:私は最初のアイテムを使用することはありません// http://php.net/manual/en/function.explode.php

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

をそれを削除し、後でタイトルとして維持する

$var_name = array_shift($variables); 
アイテムを超える

//第二に、ループ(ステップ2)とキー&値に配列を結果に

$result = array(); 

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

print_r($result); 
関連する問題