我要解析特定的字符串,并从中创建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'
]
我尝试了什么:
首先用其他东西代替{xxx}这个花括号,这样我就少了
$value = str_replace('@#', '{', $value);
$value = str_replace('#@', '}', $value);
现在,我尝试根据} {规则以某种方式爆炸,但是以某种方式,它对我不起作用。
我尝试了很多东西,但是代码很难将其粘贴到此处,但是如果有经验的人可以将我指向正确的道路,我将不胜感激。对于这个问题,也许有更好的方法,但由于缺乏经验,我看不到。
答案 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);
或创建一个以第一个键名命名的数组,并在其中包含其中的值:
$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);