Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在键值对中拆分字符串_Php_Arrays_Split_Explode - Fatal编程技术网

PHP在键值对中拆分字符串

PHP在键值对中拆分字符串,php,arrays,split,explode,Php,Arrays,Split,Explode,我知道以前有人问过这个问题,但这有点不同 我有一个字符串,比如: [de]Text1[fr]Text2[en]Text3 我需要分成键值对,比如 数组'de'=>'Text','fr'=>'Text','en'=>'Text' 我现在是这样做的,但这不是很优雅,在数组的第一个位置生成一个空对象: $title = '[de]Text1[fr]Text2[en]Text3'; $titleParts = explode('[',$title); $langParts; foreach($tit

我知道以前有人问过这个问题,但这有点不同

我有一个字符串,比如:

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

我需要分成键值对,比如

数组'de'=>'Text','fr'=>'Text','en'=>'Text'

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

$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

您可以使用:

$title='[de]Text1[fr]Text2[en]Text3'; preg\u match \u all'~\[^[]+\][^[]+~',$title,$match; $output=array_combine$match[1],$match[2]; 您的示例也可以进行最小的更改:

您可以使用:

$title='[de]Text1[fr]Text2[en]Text3'; preg\u match \u all'~\[^[]+\][^[]+~',$title,$match; $output=array_combine$match[1],$match[2]; 您的示例也可以进行最小的更改:

尝试使用preg\u match\u all:

尝试使用preg_match_all:


你到底想做什么?如前所述,我需要按照上面给出的代码将上面给出的字符串拆分为上面给出的键值对,但要更加优雅。但无论如何,谢谢你的否决票…为什么不制作一个Json数组?你实际上想做什么?如前所述,我需要将上面给出的字符串拆分为上面给出的键值对,作为p呃,我上面给出的代码比较优雅。不过还是要谢谢你的否决票……为什么不制作一个Json数组呢?啊,我们做了同样的预匹配。我会删除mine@Rasclatt:您不需要这样做,您的模式不同,循环也不同,因此答案不同…是的,虽然方法相同,我将取消删除它,但我不知道我的g_匹配表达式和你的一样好。而且你的数组组合是天才。你的更全面!很好。啊,我们做了同样的预匹配。我会删除mine@Rasclatt:您不需要这样做,您的模式不同,循环也不同,因此答案不同…是的,虽然方法相同,我将取消删除它,但我不知道我的pr你的匹配表达式和你的一样好。而且你的数组组合是天才。你的比你的更好!很好。
<?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
)