将字符串转换为具有固定长度的一组数组

Dra*_*sil 2 php string optimization

我需要将一个字符串转换为一组固定长度的数组.

示例:输入: 1111122222333333

我需要输出

[0] =>
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
    [4] => 1
[1] =>
    [0] => 2
    [1] => 2
    [2] => 2
    [3] => 2
    [4] => 2
Run Code Online (Sandbox Code Playgroud)

以下代码非常有用:

    for ($x = 0; $x < count($codedDataArray) - $colWidthSum + 1; $x += $colWidthSum + 1) {

        for ($c = 0; $c <= $colWidthSum; $c++) {
            $rows[$j][] = $codedDataArray[$z];
            $z++;
        }
        $j++;
    }
Run Code Online (Sandbox Code Playgroud)

但是当我给它提供非常大的字符串时,它会耗尽内存,例如10959字节.

是否有一个内置的PHP函数,我错过了会做同样的事情,或者我只是要处理内存问题?

编辑1:我跑出来的两个内存preg_splitstr_split一样,所以我可能做的事情真的错了.一旦我弄清楚我最初的问题是什么,我仍然会回答.

编辑2:字符串长度实际上是745,982字节,我正在查看压缩长度.

编辑3:我认为字符串太大了.我将不得不看看是否有一种方法可以在不丢失数据的情况下将其分解,因为这实际上是一个小例子而且它实际上是二进制数据.谢谢大家的答案!

Dam*_*rsy 14

试试这个.我刚用10,000字的字符串进行了测试,但内存不足:

$array = str_split($string);

// returns $array = Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [3] => 1
    [4] => 1
    [5] => 2
    [6] => 2
    [7] => 2
    [8] => 2
    [9] => 2
    [10] => 3
    [11] => 3
   // and so on
)
Run Code Online (Sandbox Code Playgroud)

然后:

array_chunk($array, 5);

// returns:

[0] => Array
    (
        [0] => 1
        [1] => 1
        [2] => 1
        [3] => 1
        [4] => 1
    )

[1] => Array
  (
        [0] => 1
        [1] => 2
        [2] => 2
        [3] => 2
        [4] => 2
    )
Run Code Online (Sandbox Code Playgroud)