将php字符串拆分成不同长度的块

aag*_*aag 8 php arrays string split

我正在寻找将字符串拆分为数组的方法str_split(),其中块的大小各不相同.

我可以通过使用一堆循环遍历字符串来做到这一点substr(),但这看起来既不优雅也不高效.是否有一个函数接受一个字符串和一个数组,如(1, 18, 32, 41, 108, 125, 137, 152, 161),并产生一个适当切碎的字符串片数组?

爆炸是不合适的,因为块是由不同数量的空格分隔的.

Jay*_*Jay 9

PHP中没有任何内容可以帮助您(这有点具体).所以作为radashk只是siad,你只需要编写一个函数

function getParts($string, $positions){
    $parts = array();

    foreach ($positions as $position){
        $parts[] = substr($string, 0, $position);
        $string = substr($string, $position);
    }

    return $parts;
}
Run Code Online (Sandbox Code Playgroud)

这样的事情.然后你可以在任何你喜欢的地方使用它,所以它很干净:

$parts = getParts('some string', array(1, ... 161));
Run Code Online (Sandbox Code Playgroud)

如果你真的想要,你可以将它破坏成正则表达式:

^.{1}.{18} <lots more> .{161}$
Run Code Online (Sandbox Code Playgroud)

会匹配你想要的.


小智 5

我会使用unpack ():

$str = "?ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890....";
$array = unpack("a1first/a26second/a10third/a*rest",$str);
print_r($array);
Run Code Online (Sandbox Code Playgroud)

这将返回:

Array
(
    [first] => ?
    [second] => ABCDEFGHIJKLMNOPQRSTUVWXYZ
    [third] => 1234567890
    [rest] => ....
)
Run Code Online (Sandbox Code Playgroud)