服务器上有2个文件。 1,495字节大型JSON文件和包含此代码的PHP文件:
<?php
$data = json_decode(file_get_contents('data.json'), true);
for ($i = 0; $i < count($data); $i++) $data[$i][7] = '1';
?>
我收到以下错误。的为什么吗
致命错误:允许的内存大小为268435456字节 (尝试分配32个字节)在 /path/to/file/process.php 中 在线 4
(PHP Version 5.4.45)
答案 0 :(得分:2)
考虑到您的JSON文件只有1495字节,这听起来很奇怪。我猜测您的文件内容是 object 形式({...}
),并且您正在进入无限循环。
考虑以下计划:
$json = '{"a":"0"}';
$data = json_decode ($json, true);
for ($i = 0; $i < count($data); $i++)
$data[$i][7] = '1';
每次运行循环时,都会向$data
对象添加一个数组元素,以便count($data)
比上一轮更大。计数不断增长,因此循环计数器永远不会达到极限。
解决方案是将调用移出count
:
$len = count($data);
for ($i = 0; $i < $len; $i++)
$data[$i][7] = '1';
顺便说一句,使用 array 形式的JSON对象也会发生同样的问题,并略微修改了程序:
$json = '[0]';
$data = json_decode ($json, true);
for ($i = 0; $i < count($data); $i++)
$data[$i+1][7] = '1'; // Note the +1