首页 > 解决方案 > 根据特定规则创建 php 数组

问题描述

我需要从字符串创建 php 数组,然后解析数组。

所以,规则是这样的:

{Test1|Test2} {Test3|Test4}

解析此字符串并使其成为 php 数组,如下所示:

[
    'Test1' => Test2,
    'Test3' => Test4,
]

这是我用 preg_match 成功的:

preg_match('/\{(.+)?\|(.+)}/', $attributeValue, $matches);

但是还有另一个条件我无法用 preg_match 解决,那就是:

 {1|1 Test ({5622} text)}

结果会在哪里

[
    '1' => 1 Test ({5622} text),
]

基本上,当大括号在条件内时我无法解决这个问题,我总是得到一些意想不到的结果。请帮助我朝着正确的方向前进,我不知道 preg_match 是否是我案例的最佳解决方案。

标签: php

解决方案


您必须先爆炸()字符串。

脚步:

1)explode()字符串与} {.

2) 现在,遍历结果数组。

3)在循环中,替换任何{}

4) 同样,在循环中explode()|.

5)你会得到两个字符串(数组元素)。

6)第一个元素是您想要的键,第二个是想要的值。

7) 将键值对附加到一个新的空白数组中。

8)享受!!!

工作代码:

<?php
$string = '{Test1|Test2} {Test3|Test4}';
$finalArray = array();
$asArr = explode( '} {', $string );
$find = ['{', '}'];
$replace = ['', ''];
foreach( $asArr as $val ){
 $val = str_replace($find, $replace, $val);
  $tmp = explode( '|', $val );
  $finalArray[ $tmp[0] ] = $tmp[1];
}
echo '<pre>';
print_r($finalArray);
echo '</pre>';

输出:

Array
(
    [Test1] => Test2
    [Test3] => Test4
)

相同代码的另一个版本,代码行数更少:

$string = "{Test1|Test2} {Test3|Test4}";
$string = str_replace('{', '', $string);
$arr = array_filter(explode('}', $string));
foreach($arr as $item){
 $item = explode('|', $item);
 $result[trim($item[0])] = trim($item[1]);
}
echo '<pre>';print_r($result);echo '</pre>';

推荐阅读