分割大数组:不能将标量值用作数组


Slicing big array: Cannot use a scalar value as an array

我正在创建一个批处理过程,该过程定期从数据库中删除大量不必要的数据。

出于性能原因,我没有使用任何ORM,我只是:

  1. 在一个查询中从数据库获取所选记录的主键,以及
  2. 在下一个查询中删除它们

问题是,有时确实有数百万条记录需要删除。因此,我想以每个查询1000个关键字(delete from foo where id in(...))的形式删除它们。

我试过这个:

$chunkSize = 1000;
$ids = $mapper->getIdsForFoo(); //getting ids from db
    $idsCount = count($ids);
    if($idsCount && $ids != false){
      $chunks = ceil($idsCount / $chunkSize); //calculating chunks quantity      
      $chunksArr = array();
      //if there's more than 1000 ids, split them
      if($chunks > 1){
        for($i = 0; $i <= $chunks; $i++){
          $currentOffset = $i * $chunkSize;
          $chunks[] = 'array_slice($idsCount, $currentOffset, $chunkSize);
        }
      }
      else{
        $chunksArr[] = $ids;
      }
      //deleting ids code here
    }

不幸的是,我得到的结果是

PHP Warning: Cannot use a scalar value as an array

首先我想那是因为我在array_slice() 中做了乘法

$chunks[] = 'array_slice($ids, $i * $chunkSize, $chunkSize);

但我提取它来分离变量

$currentOffset = $i * $chunkSize;
$chunks[] = 'array_slice($ids, $currentOffset, $chunkSize);

但我还是犯了同样的错误。

为什么不使用array_chunk?它正是你想做的:

$chunks = array_chunk($ids, 1000);

如果您不想要此解决方案,则给定的示例不会声明$mailsIds。在顶部,它被称为$ids