【问题标题】:PHP Split string in key value pairsPHP 在键值对中拆分字符串
【发布时间】:2015-06-19 15:26:26
【问题描述】:

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

我有一个类似的字符串:

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

我需要拆分成键值对,例如

array('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 )

【问题讨论】:

  • 你到底想做什么?
  • 如所写,我需要根据我的代码(如上所示)将字符串(如上所示)拆分为键值对(如上所示),但更优雅。但无论如何感谢您的反对...
  • 为什么不做一个Json数组呢?

标签: php arrays split explode


【解决方案1】:

你可以使用preg_match_all():

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

demo

您的示例也可以进行最小的更改:demo

【讨论】:

  • 啊,我们做了同样的 preg_match_all()。我会删除我的
  • @Rasclatt:你不需要这样做,你的模式不同,循环也不同,所以答案不同......
  • 是的,方法是一样的,我会取消删除它,但我不知道我的 preg_match 表达式和你的一样好。
  • 您的array_combine() 是天才。你的周围更好!不错。
【解决方案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
)

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2016-12-13
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多