web-dev-qa-db-fra.com

Comment ignorer la 1ère clé dans une boucle de tableau?

J'ai le code suivant:

if ($_POST['submit'] == "Next") {
    foreach($_POST['info'] as $key => $value) {
        echo $value;
    }
}

Comment puis-je faire démarrer la fonction foreach à partir de la 2ème clé du tableau?

48
aeran

Pour les tableaux raisonnablement petits, utilisez array_slice pour en créer un deuxième:

foreach(array_slice($_POST['info'],1) as $key=>$value)
{
    echo $value;
}
112
Michael Stum
foreach(array_slice($_POST['info'], 1) as $key=>$value) {
    echo $value;
}

Alternativement, si vous ne voulez pas copier le tableau, vous pouvez simplement le faire:

$isFirst = true;
foreach($_POST['info'] as $key=>$value) {
    if ($isFirst) {
        $isFirst = false;
        continue;
    }   
    echo $value;
}
41
Tom Haigh

Ne pourriez-vous pas simplement désinstaller le tableau ...

Donc, si j'avais un tableau où je ne voulais pas la première instance, je pourrais simplement:

unset($array[0]);

et cela supprimerait l'instance du tableau.

24

Si vous travailliez avec un tableau normal, je dirais d'utiliser quelque chose comme

foreach (array_slice($ome_array, 1) as $k => $v {...

mais, puisque vous regardez une demande d'utilisateur, vous n'avez aucune garantie réelle sur l'ordre dans lequel les arguments peuvent être renvoyés - un navigateur/proxy peut changer son comportement ou vous pouvez simplement décider de modifier votre formulaire dans le futur. Quoi qu'il en soit, il est dans votre intérêt d'ignorer l'ordre du tableau et de traiter les valeurs POST comme une carte de hachage non ordonnée, vous laissant deux options:

  • copiez le tableau et unset la clé que vous souhaitez ignorer
  • parcourir le tableau entier et continue lorsque vous voyez la clé que vous souhaitez ignorer
6
Sean McSomething

en boucle:

if ($key == 0) //or whatever
   continue;
4
Irmantas

Une autre méthode consiste à utiliser des pointeurs de tableau:

reset($_POST['info']); //set pointer to zero
while ($value=next($_POST['info'])  //ponter+1, return value
{
  echo key($_POST['info']).":".$value."\n";
}
3
zb'

Si vous êtes prêt à jeter le premier élément, vous pouvez utiliser array_shift(). Cependant, cela est lent sur un énorme tableau. Une opération plus rapide serait

reset($a);
unset(key($a));
2
staticsan

Sur un tableau rempli de 1000 éléments, la différence est assez minime.

Test:

<?php
function slice($a)
{
    foreach(array_slice($a, 1) as $key)
    {

    }

    return true;
}

function skip($a)
{
    $first = false;

    foreach($a as $key)
    {
        if($first)
        {
            $first = false;
            continue;
        }
    }

    return true;
}

$array = array_fill(0, 1000, 'test');

$t1 = time() + microtime(true);

for ($i = 0; $i < 1000; $i++)
{
    slice($array);
}

var_dump((time() + microtime(true)) - $t1);

echo '<hr />';

$t2 = time() + microtime(true);

for ($i = 0; $i < 1000; $i++)
{
    skip($array);
}

var_dump((time() + microtime(true)) - $t2);
?>

Sortie:

flotteur (0,23605012893677)

flotteur (0,24102783203125)

1
alexn

Code de travail de mon site Web pour ignorer le premier résultat, puis continuer.

<?php 

$counter = 0;

foreach ($categoriest as $category) { if ($counter++ == 0) continue; ?>

Il fonctionne sur opencart également dans le fichier tpl, faites comme cela au cas où vous en auriez besoin.

1
Dheeraj Verma

Que diriez-vous quelque chose comme ça? Lisez la première clé et la première valeur à l'aide de key() et current(), puis array_shift() pour retirer l'élément frontal du tableau (EDIT: N'utilisez pas array_shift(), il renumérote tous les indices numériques du tableau, ce que vous ne voulez pas toujours!).

 <? php 
 
 $ arr = array (
 
 'one' => "ONE !!", 
 ' deux '=> "DEUX !!", 
' trois '=> "ARBRE", 
 4 => "Quatrième élément", 
 99 => "Nous avons sauté quelques-uns ici .. "
 
); 
 
 $ firstKey = key ($ arr); 
 $ firstVal = current ($ arr); 

    écho( "
OK, les premières valeurs sont $ firstKey, $ firstVal "); ####array_shift ($ arr); # élément avant 'dequeue' # MAL! renumbers! unset ($ arr [$ firstKey]); # MIEUX! Echo ("
Maintenant pour les autres "); Foreach ($ arr as $ key => $ val) { Echo ("
$ key => $ val "); } ?>
0
bobobobo


foreach($_POST['info'] as $key=>$value) {
    if ($key == 0) { //or what ever the first key you're using is
        continue;
    }  else { 
        echo $value;
    }
}
0
Shadi Almosri