解析字符串并使用键,值对创建数组

时间:2019-06-06 17:26:13

标签: php arrays

我要解析特定的字符串,并从中创建php数组键值对。对此并不聪明,此时无法找到合适的解决方案。 字符串如下所示:

{xxx} some text 1{*|, some text 2 {xxx}}{*|, some text 3 {xxx}}{*|, 1 {xxx} some text 4}{*|, 1 {xxx} some text 5}

我需要这样创建php数组:

[
    '{xxx} some text 1' => 'some text 2 {xxx}'
    '{xxx} some text 1' => 'some text 3 {xxx}'
    '{xxx} some text 1' => '1 {xxx} some text 4'
    '{xxx} some text 1' => '1 {xxx} some text 5'
]

我尝试了什么:

  1. 首先用其他东西代替{xxx}这个花括号,这样我就少了

        $value = str_replace('@#', '{', $value);
        $value = str_replace('#@', '}', $value);
    
  2. 现在,我尝试根据} {规则以某种方式爆炸,但是以某种方式,它对我不起作用。

我尝试了很多东西,但是代码很难将其粘贴到此处,但是如果有经验的人可以将我指向正确的道路,我将不胜感激。对于这个问题,也许有更好的方法,但由于缺乏经验,我看不到。

1 个答案:

答案 0 :(得分:1)

您可以使用explode函数通过{*|,模式创建这些值的数组,然后用每个与第一个值匹配的值作为键建立一个新的数组。

请注意,关联数组中不能具有相同的键,因此必须使用相同的键=>值对来创建子数组,如下所示:

$str = '{xxx} some text 1{*|, some text 2 {xxx}}{*|, some text 3 {xxx}}{*|, 1 {xxx} some text 4}{*|, 1 {xxx} some text 5}';

$values = explode('{*|,', $str);

$newArray = [];
for ($i = 1; $i < count($values); $i++) {
    $newArray[$i][$values[0]] = $values[$i];     
}

var_dump($newArray);

此处输出:https://3v4l.org/ZS461

或创建一个以第一个键名命名的数组,并在其中包含其中的值:

$str = '{xxx} some text 1{*|, some text 2 {xxx}}{*|, some text 3 {xxx}}{*|, 1 {xxx} some text 4}{*|, 1 {xxx} some text 5}';

$values = explode('{*|,', $str);

$newArray = [];
for ($i = 1; $i < count($values); $i++) {
    $newArray[$values[0]][$i - 1] = $values[$i];    
}

var_dump($newArray);

此处输出:https://3v4l.org/9JgGg