我需要从字符串创建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是否是适合我的情况的最佳解决方案。
答案 0 :(得分:1)
您必须先explode()字符串。
步骤:
1)explode()
字符串和} {
。
2)现在,循环遍历结果数组。
3)在循环中,替换任何{
和}
4)同样,在explode()
的{{1}}循环中。
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
)
答案 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
)