2010-07-19 10 views
0

Je travaille sur le système de pagination personnalisé et j'ai rencontré le problème suivant. Lorsque l'un des éléments est filtré hors de l'ensemble, la taille du tableau final est plus petite que nécessaire. Par conséquent je cherche une solution pour augmenter le nombre d'itérations de l'intérieur de la boucle pour toujours obtenir le tableau composé de 50 éléments.Comment faire pour augmenter le nombre d'itérations de la boucle en php?

$limit = 50; //Number of elements I want to fetch 

for($x=0; $x<$limit; $x++){ 

    if ($elementIsNotFiltered) { 
     //add element to $someArray; 
    } 
    else { 
     //increase the number of iterations, so even if some elements are filtered out, 
     //the size of $someArray will always be 50 
    } 

} 

Merci pour toute aide.

Répondre

7

Est-ce que dans une boucle à la place while() et break lorsque vous avez enfin atteint votre $limit

+3

Oui, car les boucles sont pour quand vous connaissez le nombre, tandis que les boucles sont pour quand vous ne connaissez pas le nombre, mais vous savez quand vous y arrivez –

+1

Mais pourquoi une boucle while infinie et puis rompre au lieu de spécifier la condition en utilisant while? – NikiC

+1

Vous pouvez facilement définir une condition dans la boucle plutôt que d'utiliser break $ x = true; while ($ x) {if () { $ x = faux;}} –

2
else { 
    ++$limit; 
} 

essayé?

Vous pouvez également faire la même chose dans l'autre sens:

else { 
    --$x; 
} 

Ou être un peu plus efficace:

$x = 0; 
while ($x != 50) { 
    if ($notFiltered) { 
     ++$x; 
    } 
} 

Si vous souhaitez enregistrer la variable compteur aussi, vous peut utiliser:

while (!isset($array[49])) { 
} 

Le !isset($array[49]) ici est seulement synonyme de count($array) < 50

+0

Oui, mais il ne semble pas t o travail. – ababa

+0

@ecu - que diriez-vous de '$ x -' à la place? –

+0

@nikic, La raison pour laquelle cela ne fonctionnera pas est que la clause else se déclenchera une fois la boucle terminée - la modification de la limite $ à ce stade est trop tardive. –

2

Utilisez une boucle while.

while(count($somearray) < 50 && /*elements remain*/) ...

0

Il me semble que vous êtes à la recherche d'une boucle while - pas une boucle for:

while ($items < 50 && [more items to filter]) { 
    if ([add to array]) { 
     $items++; 
    } 
} 

Si vous voulez vraiment faire dans votre boucle for vous pouvez toujours modifier $x mais cela rend votre code illisible et difficile à maintenir - je recommanderais pas en faisant cela ...