我在PHP中解析一个具有以下模式的字符串
VARIABLE Key1 Value1 Key2 Value2 Key3 Value3 ...
类似于:
JOBGRADE 'P' 'Parttime Employee' 'C' 'Customer Support'
OR
SOMEVARIABLE 1 "Value1" 2 'Value2'
此行以不带引号的字符串开头,可以包含单引号或双引号字符串和/或数字。它可以有一对多的键值对。
我需要以两种方式分割字符串:
第一个获取非数字的不带引号的字符串。
第二个提取数值和/或引用字符串 - 可以是单个或dobule
因此我需要
OR
我的想法:
我考虑过拆分字符串并迭代它来测试:
表示1:如果值不是数字且未引用,则为变量名称
for 2+:不确定这样做的简单方法,因为我必须检测键和值之间的差异:
问题:
如何区分键/值?
答案 0 :(得分: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" }
答案 1 :(得分:1)
首先在变量字符串上使用explode()以将所有部分分隔为一个空格: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);