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

时间:2018-03-01 15:25:32

标签: php arrays regex

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

1-Test Response|9-DNC|

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

相反,请使用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"
}

答案 1 :(得分:0)

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

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

非常直接。

答案 2 :(得分:0)

假设键或值中不存在分隔符:-|,这是处理字符串的另一种非正则表达方式:

代码:(Demo

$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',
)