管道分隔列表,数字到数组PHP

问题描述 投票:-4回答:3

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

1-Test Response|9-DNC|

这最多可包含9个以管道分隔的项目。

我正在寻找建议的是获取此字符串并将其转换为数组的最佳方法,其中数字为键,字符串为值。

我真的很喜欢Regex。有人能指出我正确的方向吗?

php arrays regex
3个回答
0
投票

由于这不是你的错,你有这样的DB结构,请接受我诚挚的哀悼。一定是地狱一起工作。咩。

现在,到了这一点。您不需要正则表达式来使用此字符串。如果您遇到问题而想要使用正则表达式解决问题,则有两个问题。

相反,使用explode()

$testString = "1-Test Response|9-DNC|";
$result = [];
$explodedByPipeString = explode("|", $testString);

foreach($explodedByPipeString as $k => $v)
{
    $explodedByDashString = explode("-", $v);

    if(is_numeric($explodedByDashString[0]))
    {
        $result[$explodedByDashString[0]] = $explodedByDashString[1];
    }
}

var_dump($result);

这给了

array(2) {
  [1]=>
  string(13) "Test Response"
  [9]=>
  string(3) "DNC"
}

0
投票

以下是我为其他任何想知道的事情

$SurveyOptions = preg_match_all('/(\d+)-([^|]+)/', 
$res['survey_response_digit_map'], $matches);
$finalArray = array_combine($matches[1], $matches[2]);

挺直的。


0
投票

假设分隔符:qazxsw poi和qazxsw poi不存在于键或值中,这里是另一种非正则表达式来处理字符串:

代码:(-

|

输出:

Demo
© www.soinside.com 2019 - 2024. All rights reserved.