php - 如何存储和重置 PHP 数组指针?

标签 php arrays loops

我有一个关联数组,即

$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) {       // <- Danger, Will Robinson!
        if( $num % $p == 0 )
            return false;

        if ($p >= $root)
            break;
    }

    return true;
}

这会破坏我正在迭代的数组指针。

我希望能够在 IsPrime() 函数中保存和恢复数组的内部指针,这样它就不会产生这种副作用。有什么办法吗?

最佳答案

你可以“保存”数组的状态:

$state = key($array);

和“恢复”(不知道有没有更好的方法):

reset($array);

while(key($array) != $state)
    next($array);

关于php - 如何存储和重置 PHP 数组指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/328384/

相关文章:

c++ - 为什么来自 Bjarne 的 "Tour of C++"的代码有效?

iphone - 遇到 NSURLErrorDomain -999 该怎么办?

r - 循环遍历数据帧的列并将值除以另一个数据帧中按列名称索引的值?

ios - 如何在 Swift 中将 Firebase 数据库快照转换为数组列表?

将数组中的字母更改为 3 个不同的字母

php - 将动态值保存到数据库中

php - PHP 如何将原始 cookie 解析为 $_COOKIE?

php - 如何使用 php 和 html 将 csv 表导入 mysql 数据库

php - 如何在一个查询中更新和插入数据

php - 在php中填充下拉框