首页 > 解决方案 > 致命错误:循环通过 14 个元素长的单字符数组时允许的内存大小耗尽

问题描述

我有一个简单的字符串。我需要生成一个输出数组,以便每 2 个连续字符的顺序颠倒。

输入字符串是14f05000034e69,我需要以下输出Array [4, 1, 0, f, 0, 5, 0, 0, 4, 3, 6, e, 9, 6]

这是我的PHP代码:

$myString = "14f05000034e69";
$myStringArray = str_split($myString);

$newArray = array();
for ($index=0; $index<count($myStringArray)-1; $index+2) {
    $newArray[] = $myStringArray[$index+1];
    $newArray[] = $myStringArray[$index];
}

print_r($newArray);

它给了我

致命错误:第 8 行 /var/www/html/test.php 中允许的内存大小为 134217728 字节已用尽(尝试分配 134217736 字节)

问题是为什么以及如何解决它?

标签: phparraysmemory-managementmemory-size

解决方案


<?php


$myString = "14f05000034e69";
$myStringArray = str_split($myString);

$i=0;
foreach($myStringArray as $row){
    if(array_key_exists($i,$myStringArray)) {
        $newArray[$i] = $myStringArray[$i + 1];
        $newArray[$i + 1] = $myStringArray[$i];
        $i = $i + 2;
    }
}

echo '<pre>';
print_r($newArray);

我以一种有点“肮脏”的方式找到了一种解决方法,但我设法做到了你所要求的。

基本上我像你一样分割字符串,但我使用新的数组位置并将我的新数组推入我想要的位置,这就是我使用计数器的原因。

输出是:

Array
(
    [0] => 4
    [1] => 1
    [2] => 0
    [3] => f
    [4] => 0
    [5] => 5
    [6] => 0
    [7] => 0
    [8] => 3
    [9] => 0
    [10] => e
    [11] => 4
    [12] => 9
    [13] => 6
)

基本上我认为我需要将数组循环两个,但每次循环我都需要处理 2 个数组位置,然后是接下来的两个。

因此,这导致我以$new_array一种同时在当前位置和下一个位置推送数据的方式来处理我的数据,这就是为什么使用计数器$i+1来处理数组位置的原因。

如果我没有在那里使用它并使用简单$newArray[],它会将数据放在我当前的位置并在第二步中再次覆盖它,而且我无法将我的数组指针移动到位置 1、3、5、6 等,这就是为什么我我“强迫”它使用我的$i计数器,所以我一直指向每个位置。

我的$i计数器设置在每个循环的末尾以与第 2 步一起移动。


推荐阅读