php - 根据特定规则创建 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 是否是我案例的最佳解决方案。
解决方案
您必须先爆炸()字符串。
脚步:
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>';
推荐阅读
- python - 停止一段时间循环从另一个 python 程序修改其条件(标志)
- javascript - 单击开始按钮时的 JavaScript 倒数计时器,用于小时、分钟和秒
- typo3 - Typo3:登录后重定向不起作用
- laravel - 在 Laravel 中使用一组硬编码的值代替传统的 Eloquent 模型
- angular - ng测试期间的StaticInjectorError
- c# - 在 WM_MOVING 处理程序中更改窗口边界而不触发 Aero Shake
- swift - 动态调整 UITableViewCells 的大小
- excel - 如何使用 Excel 中的 Sumif() 仅计算小时数
- javascript - 将 Javascript 数组解析为 PHP 问题
- php - do_shortcode 中的 acf 字段数据未填充