我有一个关联数组,即
$primes = array(
2=>2,
3=>3,
5=>5,
7=>7,
11=>11,
13=>13,
17=>17,
// ...etc
);
那我呢
// seek to first prime greater than 10000
reset($primes);
while(next($primes) < 10000) {}
prev($primes);
// iterate until target found
while($p = next($primes)) {
$res = doSomeCalculationsOn($p);
if( IsPrime($res) )
return $p;
}
问题是IsPrime还遍历$primes数组,
function IsPrime($num) {
global $primesto, $primes, $lastprime;
if ($primesto >= $num)
// using the assoc array lets me do this as a lookup
return isset($primes[$num]);
$root = (int) sqrt($num);
if ($primesto < $root)
CalcPrimesTo($root);
foreach($primes as $p) { //
if( $num % $p == 0 )
return false;
if ($p >= $root)
break;
}
return true;
}
它会破坏我正在迭代的数组指针.
我希望能够在IsPrime()函数中保存和恢复数组的内部指针,因此它没有这种副作用.有没有办法做到这一点?
解决方法:
不要依赖数组指针.请改用迭代器.
您可以使用以下代码替换外部代码:
foreach ($primes as $p) {
if ($p > 10000 && IsPrime(doSomeCalculationsOn($p))) {
return $p;
}
}
标签:php,arrays,loops
来源: https://codeday.me/bug/20190611/1215249.html