将重复的“[key]value”子字符串解析为关联数组

问题描述 投票:0回答:2

我知道之前已经有人问过这个问题,但这有点不同。

我有一个像这样的字符串:

[de]Text1[fr]Text2[en]Text3

我需要拆分键值对,例如

数组('de'=>'文本','fr'=>'文本','en'=>'文本')

我现在这样做,但这不是很优雅(并且在数组的第一个位置生成一个空对象:

$title = '[de]Text1[fr]Text2[en]Text3';

$titleParts = explode('[',$title);

$langParts;
foreach($titleParts as $titlePart){
    $langPart = explode(']',$titlePart);
    $langParts[$langPart[0]] = $langPart[1];
}

print_r($langParts);

输出:

数组 ( [] => [de] => Text1 [fr] => Text2 [en] => Text3 )

php arrays string-parsing
2个回答
4
投票

你可以使用

preg_match_all()
:

$title = '[de]Text1[fr]Text2[en]Text3';
preg_match_all('~\[([^[]+)\]([^[]+)~', $title, $match);
$output = array_combine($match[1], $match[2]);

演示

您的示例也只需进行最小的更改即可工作:演示


2
投票

尝试使用

preg_match_all()

<?php
    $title = '[de]Text1[fr]Text2[en]Text3';
    preg_match_all('/([\[a-z\]]{1,})([a-zA-Z0-9]{1,})/',$title,$match);

    if(isset($match[2])) {
            foreach($match[1] as $key => $value) {
                    $array[str_replace(array("[","]"),"",$value)] = $match[2][$key];
                }
        }
    print_r($array);
?>

给你:

Array
(
    [de] => Text1
    [fr] => Text2
    [en] => Text3
)
© www.soinside.com 2019 - 2024. All rights reserved.