Php 从字符串获取带有正则表达式的数组
我得到的php数组如下所示:Php 从字符串获取带有正则表达式的数组,php,arrays,regex,Php,Arrays,Regex,我得到的php数组如下所示: array(3) { [0]=> string(12) "server[edit]" [1]=> string(14) "server[create]" [2]=> string(12) "user[delete]" } 我想将其转换为不同的数组-例如,一个名为server的数组,其中包含“edit”和“create”,另一个数组是“user”,其中包含“delete” 正确的模式是什么 谢谢你的帮助 与其对整个数组尝试正
array(3) {
[0]=> string(12) "server[edit]"
[1]=> string(14) "server[create]"
[2]=> string(12) "user[delete]"
}
我想将其转换为不同的数组-例如,一个名为server的数组,其中包含“edit”和“create”,另一个数组是“user”,其中包含“delete”
正确的模式是什么
谢谢你的帮助 与其对整个数组尝试正则表达式,不如尝试对每个单独的值进行匹配。以此为例
$array = array(
'server[edit]',
'server[create]',
'user[delete]',
'dsadsa'
);
$newArray = array();
foreach($array as $value)
{
preg_match("~^(\w+)\[(\w+)\]$~", $value, $matches);
if(count($matches))
{
$key = $matches[1];
if(!isset($newArray[$key]))
$newArray[$key] = array();
$newArray[$key][] = $matches[2];
}
}
var_dump($newArray);
为什么你认为正则表达式是这项工作的工具?这是我的第一个想法,所以可以过滤“服务器”和操作“编辑”或“创建”(但我不知道如何)-是否有其他解决方案?看起来
^(\w+)\[(\w+)\]$
非常适合。但将其拆分为不同的顶级数组对我来说似乎是个坏主意。您的?
仅适用于\]
,反斜杠放错了位置。我想你是想写~^(\w+)(:\[(\w+)\])?$~
@lucastrezesniewski是的,你说的对吗?和\。我不想要?:但是,因为我希望第二个捕获是插入到数组中的值。我想这就是OP的目标,这就是为什么我建议(?:
…)
而不是(
…)
。但是现在我看到你完全删除了?
。@Lucastzesniewski抱歉,我可能对我的正则表达式有些生疏,但不是吗?:这意味着捕获括号不会在$matches中返回,因此$matches[2]将返回null或不被定义?@Gareth不,它只是不算作捕获组,$matches[2]
仍将返回相同的内容。对于一个组,总是返回null
是没有意义的。