将字符串拆分为关联数组(同时保持字符)

时间:2014-07-29 09:51:19

标签: php arrays regex

我试图弄清楚如何拆分看起来像这样的字符串:

a20r51fx500fy3000

进入一个看起来像这样的关联数组:

array(
    'a' => 20,
    'r' => 51,
    'fx' => 500,
    'fy' => 3000,
);

我不认为我可以使用preg_split,因为这会丢弃我分裂的角色(我试过/[a-zA-Z]/,但显然我没有做我想要的) 。我更喜欢使用某种内置功能来实现它,但如果需要,我也不介意循环。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

多个匹配和PREG_SET_ORDER

这样做:

$yourstring = "a20r51fx500fy3000";
$regex = '~([a-z]+)(\d+)~';
preg_match_all($regex,$yourstring,$matches,PREG_SET_ORDER);
$yourarray=array();
foreach($matches as $m) {
    $yourarray[$m[1]] = $m[2];
}
print_r($yourarray);

输出:

Array ( [a] => 20 [r] => 51 [fx] => 500 [fy] => 3000 ) 

如果您的字符串可以包含大写字母,请通过在结束分隔符后添加i标志来使正则表达式不区分大小写:$regex = '~([a-z]+)(\d+)~i';

<强>解释

  • ([a-z]+)捕获第1组的信件
  • (\d+)将数字捕获到第1组
  • $yourarray[$m[1]] = $m[2];在字母索引中创建,并指定数字