4
votes

Existe-t-il un moyen de démarrer une boucle foreach au milieu d'un tableau?

J'ai une série de mois. Je veux parcourir chaque mois comme clé pour obtenir les valeurs de chacun, mais ...

Je veux commencer au mois en cours, lancer foreach et revenir à l'année suivante en m'arrêtant le 12e mois.

J'ai essayé de créer un tableau de mois distinct basé sur le mois en cours, mais cela semble un peu bizarre.

php

0 commentaires

3 Réponses :


1
votes

Vous pouvez essayer avec l'instruction continue !

$current_month = 6; # just assuming, you can change as per your requirement.
foreach ($month_array as $k => $v) {
   if ($k < 5) continue;
   // your code here to go after your current month to end of the year's month
}


2 commentaires

Je pense que Dave S souhaite que le tableau revienne aux premiers mois (mais pour l'année suivante). Exemple: commence le 18 octobre, 18 novembre, 18 décembre, 19 janvier, 19 février, etc. Cela s'arrêterait à la fin de l'année (18 décembre).


@Jonathan Désolé mon mal !! Ensuite, j'ai juste mal lu cela - je veux commencer au mois en cours, exécuter le foreach et revenir à l'année suivante en m'arrêtant le 12e mois .



4
votes

Vous pouvez utiliser une boucle do / while avec un compteur modulo, par exemple

Jun 2018
...
Dec 2018
Jan 2019
...
May 2019

Sortie:

$year = 2018;
$i = $current_month = 5;
do {
    echo $months[$i] . " $year\n";
    $i = ($i + 1) % 12;
    if ($i == 0) $year++;
} while ($i != $current_month);

Démo sur 3v4l.org

Si vous avez également besoin de maintenir un compteur d'année, vous pouvez utilisez ce code, qui incrémente l'année à la fin du mois:

Jun 
Jul 
Aug 
Sep 
Oct 
Nov 
Dec 
Jan 
Feb 
Mar 
Apr 
May

Résultat:

$months = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
$i = $current_month = 5;
do {
    echo $months[$i] . "\n";
    $i = ($i + 1) % 12;
} while ($i != $current_month);

Démo sur 3v4l.org


5 commentaires

La deuxième année entière doit être bouclée. par exemple. Juin-décembre 2019 ET janvier-décembre 2020.


@Jonathan Je ne pense pas, je pense que le 12ème mois est 11 mois après le premier mois, pas décembre de l'année suivante. Si OP avait voulu que ce soit décembre, il aurait pu le dire.


Impressionnant. Mon mal si c'est le cas, vous avez quand même mon vote! :)


@Jonathan Je suppose que nous découvrirons ce que signifie vraiment OP quand ils acceptent une réponse ... :-)


@Nick Spot sur. Je devais juste obtenir le mois en cours -1 et cela a très bien fonctionné!



1
votes

Pourquoi ne pas utiliser à la place l'instruction pour ?

June
July
August
September
...

Imprimera

$months = [
   'January', 
   'February',
   '...',
];

$currentMonth = 5; // 0 for January, 11 for December

for($i = 0; $i < 12; $i++) {
    $index = ($currentMonth + $i) % 12;

    echo $months[$index] . PHP_EOL;
}


0 commentaires