当我尝试在 PHP 中操作一个巨大的数组并将结果作为响应返回时,我遇到了致命错误HTTP POST 请求:
允许的内存大小 536870912 字节已耗尽
我已经尝试过设置ini_set('memory_limit', '-1');
为了看看我是否得到结果,但我没有得到任何类型的回复。当我尝试发出 POST 请求时,Postman 总是崩溃。
数组的起始结构就是这个。机身大小约为25mb。主数组包含大约 22k 个具有此结构的数组,我刚刚包含了 2 个:
Array
(
[0] => Array
(
[id] => 14
[isActive] => 1
[personId] => 0023fff16d353d16a052a267811af53bc8bd42f51f2266a2904ca41db19dfd32_0
[gender] => m
[age] => 69
[linedata_0] => 2018-03-01 17:15:18, 155.59, 294.076; 2018-03-01 17:16:04, 502.968, 249.947; 2018-03-01 17:16:44, 276.837, 270.593; 2018-03-01 17:17:28, 431.68, 371.14; 2018-03-01 17:17:34, 851.622, 355.915
)
[1] => Array
(
[id] => 180
[isActive] => 1
[personId] => 02659982ae8286409cc5bb283089871b62f2bafbbad517941d64e77ecf2b62b1_0
[gender] => m
[age] => 69
[linedata_0] => 2018-03-01 13:20:05, 155.599, 293.841; 2018-03-01 13:20:48, 495.468, 249.582; 2018-03-01 13:21:28, 258.791, 260.748; 2018-03-01 13:23:20, 859.061, 352.237; 2018-03-01 13:23:32, 56.1404, 269.858
)
)
下面是用于操作数组的 php 部分,以便通过分解每个用户的时间戳和坐标来获得预期的最终结果:
$final_result = [];
foreach($query_result as $row)
{
$line_datas =explode(";",$row["linedata_0"]);
$linedata = [];
$final = [];
$d = [];
for($s =0; $s < count($line_datas); $s++){
$line_data = explode(",",$line_datas[$s]);
$d["timestamp"] = utf8_encode($line_data[0]);
$d["x"]= utf8_encode($line_data[1]);
$d["y"] = utf8_encode($line_data[2]);
array_push($linedata,$d);
}
$final["id"]= $row["id"];
$final["isActive"]= $row["isActive"];
$final["personId"]= utf8_encode($row["personId"]);
$final["name"] = NULL;
$final["gender"] = utf8_encode($row["gender"]);
$final["age"] = utf8_encode($row["age"]);
$final["linedata"]=$linedata;
array_push($final_result, $final);
}
return $final_result;
在我看来,没有无限循环或不良实践可以证明内存问题是合理的。唯一真正的问题可能是需要操作的数组的大小。
有什么建议么?