Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将带数字的分隔列表导入数组PHP_Php_Arrays_Regex - Fatal编程技术网

将带数字的分隔列表导入数组PHP

将带数字的分隔列表导入数组PHP,php,arrays,regex,Php,Arrays,Regex,在我正在处理的数据库中有这样一个字符串 1-Test Response|9-DNC| 1-测试响应| 9-DNC| 最多可以有9个管道分隔项 我希望得到的建议是最好的方法,将这个字符串转换成一个数组,数字作为键,字符串作为值 我真的很讨厌正则表达式。有人能给我指出正确的方向吗?既然不是你的错,你让DB这样组织,请接受我诚挚的哀悼。用这个工作一定很辛苦。嗯 现在,说到点子上。使用此字符串不需要正则表达式。如果你有一个问题,你想用正则表达式解决它,你有两个问题 相反,请使用explode() 这给

在我正在处理的数据库中有这样一个字符串

1-Test Response|9-DNC| 1-测试响应| 9-DNC| 最多可以有9个管道分隔项

我希望得到的建议是最好的方法,将这个字符串转换成一个数组,数字作为键,字符串作为值


我真的很讨厌正则表达式。有人能给我指出正确的方向吗?

既然不是你的错,你让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',
)