【问题标题】:php multidimensional SplFixedArray declaration is throwing fatal errorphp多维SplFixedArray声明抛出致命错误
【发布时间】:2014-03-24 03:55:06
【问题描述】:

我要声明 SplFixedArray();以节省内存消耗。但它会引发致命错误。

$items=new SplFixedArray();
echo "Array Started...";
    for($h=0;$h<5000;$h++)
    {   
        for($i=0;$i<24;$i++)
        {   
            $items[$h][$i]=$objSheet->getCellByColumnAndRow($i,$h+1)->getValue();
        }
    }

如果不声明new SplFixedArray();,同样的工作

错误:

致命错误:未捕获的异常“RuntimeException”和消息“索引” /home/twa/files.php:168 中的无效或超出范围' 堆栈跟踪:#0 /home/twa/files.php(168): unknown() #1 {main} 抛出 /home/twa/files.php 第 168 行

$items=new SplFixedArray(SplFixedArray()); 也失败了...

请告诉我正确的语法...

【问题讨论】:

  • 您没有指定new SplFixedArray(); 的大小$h$i 有什么值?
  • @cornelb : h=5000 & i =30 ;问题相应修改
  • 你也可以粘贴循环代码吗?
  • 我很惊讶它完全可以工作 - 如果没有值传递给 SplFixedArray 的构造函数,文档建议它的大小为 0。
  • 我也更新了答案

标签: php arrays


【解决方案1】:
$items = new SplFixedArray(5000);
for ($h=0; $h<5000; $h++) {
    $items[$h] = new SplFixedArray(24);
    for ($i=0; $i<24; $i++) {
        $items[$h][$i] = $objSheet->getCellByColumnAndRow($i,$h+1)->getValue();
    }
}

【讨论】:

  • 在 h=720 之后,写着 Fatal error: Uncaught exception 'RuntimeException' with message 'Index invalid or out of range' in /home/twa/files.php:166 Stack trace: #0 /home/twa/files.php(166): unknown() #1 {main} thrown in /home/twa/files.php on line 166
  • $items[$h][$i] = rand(0,3000) 之类的东西进行测试。你从$objSheet-&gt;getCellByColumnAndRow($i,$h+1)-&gt;getValue() 得到什么样的价值观?
  • 它是一个字符串。是否可以在每 500 次迭代后清除数组内存,这样我就不会遇到内存问题
  • 你在SplFixedArray之前试过普通数组吗?也许这也有效
  • 我在普通数组中遇到了类似的问题。所以想用splfixedarray来节省内存..
猜你喜欢
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多