php - 致命错误:循环通过 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 字节)
问题是为什么以及如何解决它?
解决方案
<?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 步一起移动。
推荐阅读
- python - 从 AWS Lambda 层导入 cffi python 模块时出错
- typescript - 根据变量输入键入回调函数
- google-bigquery - Google Cloud Data Fusion 将 Excel 提取到 Bigquery
- php - 传递参数的php soap调用问题
- sed - 带 sed 的 while 循环。用另一个文件中的文本替换一个文件中的匹配模式
- .net-core - 从外部二进制文件构建 NuGet 包
- flutter - 如何在颤动中隐藏文本字段的一侧?
- sql - 从另一列中的日期减去一列中的值
- reactjs - 如何在 ReactJs 中使用 formik.handleChange 和 onChange 调用两个或多个函数
- javascript - 棋盒之间的空行