qualcuno mi sa spiegare il perchè di questo problema?

Questo che riporto di seguito va fuori tempo massimo di esecuzione, anche se :

Codice PHP:
$array[1][id]    = "4";
$array[1][foo]    = "quattro";
$array[2][id]    = "3";
$array[2][foo]    = "terzo";
$array[3][id]    = "2";
$array[3][foo]    = "secondo";

[
tralascio tutte le operazioni che compio sull'array]

$p=0;
while ($row = current($array)){
    $id = $row['
id'];
    ++$p;
    if($p >= 3){
        continue;
    }
    print $p;
    next($array);

ho provato a fare una cosa simile con una query sql e va perfettamente

Codice PHP:
$query mysql_query("SELECT id FROM tabella")

$p=0;
while (
$row mysql_fetch_row($query)){
    
$id $row['id'];
    ++
$p;
    if(
$p >= 3){
        continue;
    }
    print 
$p;

Ho già capito che per risolvere basta spostare next() prima del continue;
Codice PHP:
$array[1][id]    = "4";
$array[1][foo]    = "quattro";
$array[2][id]    = "3";
$array[2][foo]    = "terzo";
$array[3][id]    = "2";
$array[3][foo]    = "secondo";

[
tralascio tutte le operazioni che compio sull'array]

$p=0;
while ($row = current($array)){
    $id = $row['
id'];
    ++$p;
    next($array);
    if($p >= 3){
        continue;
    }
    print $p;

ma per quale motivo bisogna spostarlo li?

Grazie delle risposte