相关疑难解决方法(0)

如何在PHP中使用预定义的大小创建一个空数组?

我在for循环中创建一个新数组.

for $i < $number_of_items
    $data[$i] = $some_data;
Run Code Online (Sandbox Code Playgroud)

PHP一直抱怨偏移,因为每次迭代我都会为数组添加一个新的索引,这有点愚蠢.

Notice: Undefined offset: 1 in include() (line 23 of /...
Notice: Undefined offset: 1 in include() (line 23 of /..
Notice: Undefined offset: 1 in include() (line 23 of /..
Run Code Online (Sandbox Code Playgroud)

有没有办法预定义数组中的数字项,以便PHP不会显示此通知?

换句话说,我可以用与此类似的方式预定义数组的大小吗?

$myarray = array($size_of_the_earray);
Run Code Online (Sandbox Code Playgroud)

php arrays

52
推荐指数
5
解决办法
13万
查看次数

如何在 PHP 中为数组预分配内存?

如何在 PHP 中为数组预分配内存?我想为 351k long 预先分配空间。当我不使用数组时,该函数可以工作,但如果我尝试在数组中保存长值,则会失败。如果我尝试一个简单的测试循环来用 a 填充 351k 值range(),它会起作用。我怀疑该数组导致内存碎片,然后内存不足。

在 Java 中,我可以使用ArrayList al = new ArrayList(351000);.

我看到array_fill了,array_pad但是那些将数组初始化为特定值。


解决方案:

我使用了答案的组合。凯文的答案单独有效,但我希望随着规模的增长,也能防止未来出现问题。

ini_set('memory_limit','512M');
$foundAdIds = new \SplFixedArray(100000); # google doesn't return deleted ads. must keep track and assume everything else was deleted.
$foundAdIdsIndex = 0;
// $foundAdIds = array();
$result = $gaw->getAds(function ($googleAd) use ($adTemplates, &$foundAdIds, &$foundAdIdsIndex) { // use call back to avoid saving in memory
  if ($foundAdIdsIndex >= $foundAdIds->count()) $foundAdIds->setSize( $foundAdIds->count() * …
Run Code Online (Sandbox Code Playgroud)

php arrays memory-management

3
推荐指数
1
解决办法
5585
查看次数

标签 统计

arrays ×2

php ×2

memory-management ×1