2010-12-02 25 views
4

我解析PHP中的字符串具有以下模式如何在PHP中用空格,數字和引號分隔字符串?

VARIABLE Key1 Value1 Key2 Value2 Key3 Value3 ... 

類似於:

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

OR

SOMEVARIABLE 1 "Value1" 2 'Value2' 

這行開始用加引號的字符串,可以有單或雙引號的字符串和/或數字。它可以有一個到多個鍵值對。

我需要在字符串中的2種方式分爲:

第一個獲得加引號的字符串不是數字。

第二提取數字值和/或引用的字符串 - 可以是單面或dobule

因此我需要

  1. JOBGRADE
  2. ,P:PARTTIME僱員
  3. C:客戶支持

  1. SOMEVARIABLE
  2. 1:值1
  3. 2:值2

我的想法:

我想過分割字符串,並迭代通過它來測試:

爲1:如果數值不是數字並且沒有引用,它是變量名稱

爲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。 – 2010-12-02 15:57:00

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); 
相關問題