2010-08-13 14 views
0

J'ai une boucle (basée sur un tableau - qui pourrait croître mais pas trop - 6 touches maximum), par exemple: array('12','34','56',48'). Ce que je voudrais faire est de faire une boucle dans le tableau et ensuite de boucler à nouveau pour trouver le tableau "précédent" val.PHP puis-je faire cette boucle?

Par exemple, key[0] = 12, key[1] = 34 puis key[0] = 12, key[2] = 56 ensuite d'exécuter une requête basée sur la « clé actuelle » key[1] = 34 etc.

Les valeurs du tableau sont les ID d'un DB et j'ai besoin (je l'espère) et la clé précédente.

Des idées - est-ce possible?

+1

Je pense que vous manquez le point de tableaux. Ou vous n'avez pas assez bien décrit votre problème. –

+0

Pouvez-vous donner plus d'informations sur votre exemple de ce que vous cherchez? Par exemple épeler dans 2 boucles. – webdad3

Répondre

1

Je ne pense pas que plusieurs boucles sont vraiment nécessaires ici. J'utiliserais le pointeur interne du tableau avec les fonctions next(), prev() et current().

0

Si j'ai bien compris, vous voulez le faire.

for($i=1; $i < count($array); $i++) { 
    $currentValue = $array[$i]; 
    $previousValue = $array[$i-1]; 

    // Here you can run a query based on the current and the previous value 
} 

Par exemple, en prenant $array que array(12,34,56,48) vous auriez 3 itérations où le $currentValue et $previousValue aurait les valeurs suivantes:

  1. Première itération: $ currentValue = 34, $ previousValue = 12
  2. Deuxième itération: $ currentValue = 56, $ previousValue = 34
  3. Troisième itération: $ currentValue = 48, $ previousValue = 56
+0

Avec ce qui précède, vous manqueriez l'indice zéro pour la valeur actuelle - ce qui pourrait empêcher certaines actions nécessaires. –

+0

Si l'exigence est de faire une requête avec la valeur actuelle et la valeur précédente qu'elle doit commencer avec le deuxième élément sinon la valeur précédente n'existerait pas. Quoi qu'il en soit, je comprends que cela dépend du comportement spécifique requis et j'ai supposé celui que j'ai mentionné. –

0
<? 
$val = 56; 
$data = array(12, 34, 12, 56, 34); 
for($i = 0; $i < count($data); $i++) { 
    if($data[$i] == $val) { 
    if($i == 0) die("No previous"); 
    $previous = $data[$i-1]; 
    } 
} 

echo "Previous to $val was $previous"; 

ou mieux encore utiliser array_search() pour trouver index donné $ val

3
$num_elem = count($array); 
for ($i = 0; $i < $num_elem; $i++) 
{ 
    $curr_val = $array[$i]; 
    $prev_val = (0 == $i) ? null: $array[$i-1]; 
} 
2

Contrairement aux autres solutions, je recommande contre en utilisant un accesseur à base d'index.

En PHP, les clés ne sont pas nécessairement dans l'ordre. Par exemple, si vous appelez natsort sur votre tableau, les relations key=>value restent les mêmes mais le tableau lui-même est en fait réorganisé, ce qui conduit à des résultats contre-intuitifs. (Voir Why isn't natsort (or natcasesort) working here?)

Je voudrais utiliser quelque chose comme:

<?php 
    $ids = array('12','34','56','48'); 
    $previous = false; 
    foreach($ids as $id) 
    { 
    echo "current: $id\n"; 
    echo "previous: $previous\n"; 
    $previous = $id; 
    } 
?>