我有一个循环,通过给出位数来生成所有可能的二进制位组合的数组,但是当它的数量超过 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();
}
感谢您的帮助
答案 0 :(得分:0)
如果$bits
数组为空,则代码不执行任何操作,因为array_reverse
和preg_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
切割数组,并保留数组的其余项目。