【问题标题】:Fatal error: Allowed memory size of 536870912 bytes exhausted致命错误:允许的内存大小为 536870912 字节已用尽
【发布时间】:2014-04-07 08:13:23
【问题描述】:

我正在尝试构建一个需要传递给报表的数组。返回的一些数据具有相似的字段名称,因此我使用下面的函数在合并数组之前为数组键名称添加前缀,但是我得到内存不足异常“致命错误:允许的内存大小为 536870912 字节已用尽(尝试在..”中分配 44 个字节),是否有另一种方法可以在不占用大量内存的数组中为数组键添加前缀?

function prefixArrayKeys(&$_array,$prefix){

   foreach($_array  as $k=>$v){

           $nk = $prefix.$k;
           $nv = $v;
           array_push($_array, array($nk=>$nv));

           unset($_array[$k]);
       }
               var_dump($_array);
   }

函数调用:

$aSQL = "select sex, a_number, to_char(b_dtm, 'DD/MM/YYYY') b_dtm from atable where a_id = ".$ped_array[1]['D']."";
   execute_sql($aSQL,$rsGTYPE);
   prefixArrayKeys(&$rsGTYPE[0],"D");
   if(count($rsGTYPE) > 0) $rowdata[0] = array_merge($rowdata[0],$rsGTYPE[0]);

【问题讨论】:

  • 我的猜测是,在您开始操作数组之前,您正在脚本中执行其他操作,这会占用大量内存。您总共运行了多少查询?

标签: php arrays out-of-memory runtime-error


【解决方案1】:

在你的 foreach 循环中,你正在使用 array_push。

您正在添加到您正在迭代的数组中,这是一个无限循环。

【讨论】:

    【解决方案2】:

    如果您在设置新的之前尝试取消设置 $_array[$k] 可能会使其工作? 虽然我怀疑这会改变什么,除非是巨大的条目......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-23
      • 2021-04-03
      • 2014-01-06
      • 2021-12-01
      • 1970-01-01
      • 2016-09-24
      • 2012-12-27
      • 2011-02-23
      相关资源
      最近更新 更多