php 数组指针 销毁,如何存储和重置PHP数组指针?

我有一个关联数组,即

$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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值