将带数字的分隔列表导入数组PHP
在我正在处理的数据库中有这样一个字符串 1-Test Response|9-DNC| 1-测试响应| 9-DNC| 最多可以有9个管道分隔项 我希望得到的建议是最好的方法,将这个字符串转换成一个数组,数字作为键,字符串作为值将带数字的分隔列表导入数组PHP,php,arrays,regex,Php,Arrays,Regex,在我正在处理的数据库中有这样一个字符串 1-Test Response|9-DNC| 1-测试响应| 9-DNC| 最多可以有9个管道分隔项 我希望得到的建议是最好的方法,将这个字符串转换成一个数组,数字作为键,字符串作为值 我真的很讨厌正则表达式。有人能给我指出正确的方向吗?既然不是你的错,你让DB这样组织,请接受我诚挚的哀悼。用这个工作一定很辛苦。嗯 现在,说到点子上。使用此字符串不需要正则表达式。如果你有一个问题,你想用正则表达式解决它,你有两个问题 相反,请使用explode() 这给
我真的很讨厌正则表达式。有人能给我指出正确的方向吗?既然不是你的错,你让DB这样组织,请接受我诚挚的哀悼。用这个工作一定很辛苦。嗯 现在,说到点子上。使用此字符串不需要正则表达式。如果你有一个问题,你想用正则表达式解决它,你有两个问题 相反,请使用
explode()
这给
array(2) {
[1]=>
string(13) "Test Response"
[9]=>
string(3) "DNC"
}
下面是我是如何为其他想知道的人做这件事的
$SurveyOptions = preg_match_all('/(\d+)-([^|]+)/',
$res['survey_response_digit_map'], $matches);
$finalArray = array_combine($matches[1], $matches[2]);
非常简单。假设delimeters:
-
和|
在键或值中不存在,下面是另一种处理字符串的非正则表达式方法:
代码:()
输出:
array (
1 => 'Test Response',
9 => 'DNC',
)
如果您在数据库中执行此操作,那么您的数据库结构是错误的。您可以在
preg\u match\u all
中使用:/(\d+)-([^ |]+)/
,然后使用array\u combine
使用regex
看起来更干净,但您不需要regex
来解析字符串。两次调用和一次可以创造奇迹。@AlexKarshin这就是Vicidial数据库的结构。我真的没有选择的余地。
$string = '1-Test Response|9-DNC|';
$string = str_replace(['-', '|'], ['=', '&'], $string); // generates: 1=Test Response&9=DNC&
parse_str($string, $result);
var_export($result);
array (
1 => 'Test Response',
9 => 'DNC',
)