我正在寻找将unicode字母数字类型的字符串拆分为固定长度的方法。 例如:
992000199821376John Smith 20070603
并且数组应该如下所示:
Array (
[0] => 99,
[1] => 2,
[2] => 00019982,
[3] => 1376,
[4] => "John Smith",
[5] => 20070603
)
数组数据将按如下方式拆分:
Array[0] - Account type - must be 2 characters long, Array[1] - Account status - must be 1 character long, Array[2] - Account ID - must be 8 characters long, Array[3] - Account settings - must be 4 characters long, Array[4] - User Name - must be 20 characters long, Array[5] - Join Date - must be 8 characters long.
答案 0 :(得分:4)
或者如果你想避免preg:
$string = '992000199821376John Smith 20070603';
$intervals = array(2, 1, 8, 4, 20, 8);
$start = 0;
$parts = array();
foreach ($intervals as $i)
{
$parts[] = mb_substr($string, $start, $i);
$start += $i;
}
答案 1 :(得分:0)
$s = '992000199821376Николай Шмидт 20070603';
if (preg_match('~(.{2})(.{1})(.{8})(.{4})(.{20})(.{8})~u', $s, $match))
{
list (, $type, $status, $id, $settings, $name, $date) = $match;
}
答案 2 :(得分:0)
使用substr函数可以很容易地做到这一点。
$accountDetails = "992000199821376John Smith 20070603";
$accountArray = array(substr($accountDetails,0,2),substr($accountDetails,2,1),substr($accountDetails,3,8),substr($accountDetails,11,4),substr($accountDetails,15,20),substr($accountDetails,35,8));
除了正则表达式(如akond所建议的)之外,应该可以做到这一点(可能是更好的方式)。 (想象这仍然是另一种选择)。
答案 3 :(得分:0)
无法以您要求的方式拆分unicode字符串。
如果不使零件无效,则不可能。 有些代码点没有办法突出,例如:שׁ是2个代码点(UTF-8和UTF-16中有4个字节),你不能拆分它,因为它是未定义的。
当你使用unicode时,“character”是一个非常滑的术语。有代码点,字形等。请参阅http://www.utf8everywhere.org的更多信息,关于“字符串长度”的部分