我知道之前已经有人问过这个问题,但这有点不同。
我有一个像这样的字符串:
[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 )
preg_match_all()
:
$title = '[de]Text1[fr]Text2[en]Text3';
preg_match_all('~\[([^[]+)\]([^[]+)~', $title, $match);
$output = array_combine($match[1], $match[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
)