解析由\
和已知关键字分隔的字符串的最快/最简单方法是什么?
$str = 'key1\0815\key2\some string here\key3\string with \ in between\key4\0
我需要将它们放在一个数组(key => value)供以后使用,但是如果某些值可能包含\
,我该如何设置拆分字符串?
关键字是已知的,但它们都是唯一的。
explode()会失败并且sscanf()将是一个大量的手动编辑
答案 0 :(得分:2)
使用preg_split()
来实现这一目标:
$arr = preg_split('/\\\\(?!\s)/', $str);
$result = array();
foreach (array_chunk($arr, 2) as $sub) {
list($key, $value) = $sub;
$result[$key] = $value;
}
输出:
Array
(
[keyword1] => 0815
[keyword2] => some string here
[keyword3] => string with \ in between
[keyword4] => 0
)
答案 1 :(得分:0)
这应该这样做:
$result = array_combine(
$keys = preg_grep('/key[\d]+/',
$parts = preg_split('/(?:\\\\)?(key[\d]+)\\\\/', $str, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)),
$vals = array_diff($parts, $keys));