【发布时间】:2014-02-09 11:11:37
【问题描述】:
我有这个变量:
$str = "w15";
将其分别拆分为w 和15 的最佳方法是什么?
explode() 正在删除 1 个字母,而 str_split() 没有将字符串拆分为不相等字符串的选项。
【问题讨论】:
-
w15g12z会给你什么?
标签: php arrays string function split
我有这个变量:
$str = "w15";
将其分别拆分为w 和15 的最佳方法是什么?
explode() 正在删除 1 个字母,而 str_split() 没有将字符串拆分为不相等字符串的选项。
【问题讨论】:
w15g12z 会给你什么?
标签: php arrays string function split
$str = "w15xx837ee";
$letters = preg_replace('/\d/', '', $str);
$numbers = preg_replace('/[^\d]/', '', $str);
echo $letters; // outputs wxxee
echo $numbers; // outputs 15837
【讨论】:
你可以这样做来分隔字符串和数字
<?php
$str = "w15";
$strarr=str_split($str);
foreach($strarr as $val)
{
if(is_numeric($val))
{
$intarr[]=$val;
}
else
{
$stringarr[]=$val;
}
}
print_r($intarr);
print_r($stringarr);
输出:
Array
(
[0] => 1
[1] => 5
)
Array
(
[0] => w
)
如果你希望它是 15 ,你可以将 $intarr 内爆!
【讨论】:
implode($intarr, ''); implode($stringarr, '');
str_split然后foreach循环,然后结果是array。在我看来这并不快。
fast 你认为的 fast。他提到的fast是……我是第一个回答这个问题的人fast。
使用preg_split() 来实现:
$arr = preg_split('~(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)~', $str);
输出:
Array
(
[0] => w
[1] => 15
)
例如,字符串w15g12z 将给出以下数组:
Array
(
[0] => w
[1] => 15
[2] => g
[3] => 12
[4] => z
)
【讨论】:
更干净:
$result = preg_split("/(?<=\d)(?=\D)|(?<=\D)(?=\d)/",$str);
本质上,这有点像使用自定义集手动实现\b(而不是\w)
【讨论】:
w1 和 5。但是 OP 想要 w 和 15。见this demo。