空数组达到阈值时

时间:2017-11-23 14:54:45

标签: php arrays

我有一个循环,通过给出位数来生成所有可能的二进制位组合的数组,但是当它的数量超过 20 时,我遇到了内存问题。

所以我正在寻找一种方法来删除或清空以前的数组值,例如,如果数组达到1k或2k值,这里是代码:

        for ($i = 1; $i <= ($listN - 1); $i++) {
            $reverseBits = array_reverse($bits);

            $prefixBit = preg_filter('/^/', '0', $bits);

            $prefixReverseBits = preg_filter('/^/', '1', $reverseBits);

            $bits = array_merge($prefixBit, $prefixReverseBits);


            unset($prefixBit, $prefixReverseBits, $reverseBits);
        }

我已尝试过这个,但它不起作用,array在循环之外将完全为空:

           if(count($bits) > 1000){
                unset($bits);
                $bits = array();
            }

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

如果$bits数组为空,则代码不执行任何操作,因为array_reversepreg_filter不会修改数组大小,array_merge只会将现有的数字添加到一起。所以空数组总是保持空白。

而是将“emtpy”数组设置为1位默认数组['0','1']

if(count($bits) > 1000){
    $bits = array('0','1');
}

如果你想保留“最后1000”结果而不是删除所有的结果,你到目前为止考虑在循环开始时使用$bits = array_slice($bits, 0, 1000);

答案 1 :(得分:0)

为了实现这样的目标,你只需要做一些事情:

if(count($bits) > 1000){
  $bits = array_slice($bits, 1000);
}

这将从偏移1000切割数组,并保留数组的其余项目。

参考:http://php.net/manual/en/function.array-slice.php

相关问题