的块,我寻找各种方法来将字符串分割成一个数组中,str_split()
排序,其中块都是不同的尺寸。分裂PHP字符串转换成不同长度
我能做到这一点通过与一堆substr()
串循环,但是这看起来既不优雅,也不高效。有没有一个函数接受一个字符串和一个数组,如(1, 18, 32, 41, 108, 125, 137, 152, 161
),并产生一个适当切碎的字符串片段的数组?
爆炸,因为该块是通过改变空格的数量界定是不恰当的。
的块,我寻找各种方法来将字符串分割成一个数组中,str_split()
排序,其中块都是不同的尺寸。分裂PHP字符串转换成不同长度
我能做到这一点通过与一堆substr()
串循环,但是这看起来既不优雅,也不高效。有没有一个函数接受一个字符串和一个数组,如(1, 18, 32, 41, 108, 125, 137, 152, 161
),并产生一个适当切碎的字符串片段的数组?
爆炸,因为该块是通过改变空格的数量界定是不恰当的。
没有什么在PHP中,将做到这一点对你(这是一个有点特殊)。因此,作为radashk只是西亚德,你只需要编写一个函数
function getParts($string, $positions){
$parts = array();
foreach ($positions as $position){
$parts[] = substr($string, 0, $position);
$string = substr($string, $position);
}
return $parts;
}
类似的东西。然后,您可以使用它你喜欢的地方,所以它是干净的:
$parts = getParts('some string', array(1, ... 161));
如果你真的想,你可以爆它变成一个正则表达式:
^.{1}.{18} <lots more> .{161}$
将匹配你想要的。
谢谢周杰伦。我得出了同样的结论! – aag 2012-07-08 12:36:18
稍微更灵活变型中,有用的解析与固定长度的记录ASCII表:
function ParseIrregularString ($string, $lengths)
{
$parts = array();
foreach ($lengths as $StringKey => $position)
{
$parts[$StringKey] = substr($string, 0, $position);
$string = substr($string, $position);
}
return $parts;
}
提交下列:
$string = "abcdefghiklmnopqrstuvz";
$lengths = array ("field1"=>4, "field2"=>3, "field3"=>5, "field4"=>2);
print_r (ParseIrregularString ($string, $lengths));
回报:
Array ([field1] => abcd [field2] => efg [field3] => hiklm [field4] => no)
$ position在此处未定义 – MimiEAM 2012-08-12 14:10:33
只是为了将来引用正则表达式的方法@jay建议如下所示:
$regex="/(.{1})(.{18})(.{32})(.{41})(.{108})(.{125})(.{137})(.{152})(.{161})/";
preg_match($regex,$myfixedlengthstring,$arr);
其中$ myfixedlengthstring在目标串和$ ARR给你结果
一个例子吗? – hjpotter92 2012-07-08 09:54:16
创建功能!:) – Samson 2012-07-08 09:54:16
你检查PHP的爆炸()函数? – 2012-07-08 09:57:02