根据特定规则创建php数组

时间:2019-04-17 10:55:40

标签: 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是否是适合我的情况的最佳解决方案。

2 个答案:

答案 0 :(得分:1)

您必须先explode()字符串。

步骤:

1)explode()字符串和} {

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

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

4)同样,在explode()的{​​{1}}循环中。

5)您将获得两个字符串(数组元素)。

6)第一个元素是所需的键,第二个元素是所需的值。

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

8)享受!!!

Working Code:

|

输出:

<?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
)

答案 1 :(得分:1)

您可以使用以下代码获取所需的输出。无需使用preg_match。

$string = "{Test1|Test2} {Test3|Test4}";

$string_array = array_filter(explode('}', $string));
$result = [];
foreach($stringarray as $item){
  $item = str_replace('{', '', $item);
  $item_array = explode('|', $item);
  $result[$item_array[0]] = $item_array[1];
}
echo "<pre>";
print_r($result);

输出:

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