it-swarm.com.de

Wie überspringe ich die 1. Taste in einer Array-Schleife?

Ich habe folgenden Code:

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

Wie starte ich die foreach-Funktion ab der 2. Taste im Array?

48
aeran

Verwenden Sie für einigermaßen kleine Arrays array_slice , um ein zweites zu erstellen:

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;
}

Alternativ können Sie Folgendes tun, wenn Sie das Array nicht kopieren möchten:

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

Könnten Sie nicht einfach das Array aufheben ...

Wenn ich also ein Array hätte, in dem ich die erste Instanz nicht haben wollte, könnte ich einfach:

unset($array[0]);

und das würde die Instanz aus dem Array entfernen.

24

Wenn Sie mit einem normalen Array arbeiten würden, würde ich so etwas verwenden

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

da Sie sich jedoch eine Benutzeranforderung ansehen, haben Sie keine wirklichen Garantien für die Reihenfolge, in der die Argumente zurückgegeben werden. Einige Browser/Proxys ändern möglicherweise ihr Verhalten oder Sie ändern einfach Ihr Formular in der Zukunft. In beiden Fällen liegt es in Ihrem Interesse, die Reihenfolge des Arrays zu ignorieren und POST Werte als ungeordnete Hash-Map zu behandeln, sodass Sie zwei Optionen haben:

  • kopieren Sie das Array und unset den Schlüssel, den Sie ignorieren möchten
  • durchlaufen Sie das gesamte Array und continue, wenn Sie den Schlüssel sehen, den Sie ignorieren möchten
6

in Schleife:

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

Alternativ können Sie Array-Zeiger verwenden:

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

Wenn Sie bereit sind, das erste Element wegzuwerfen, können Sie array_shift() verwenden. Bei einem riesigen Array ist dies jedoch langsam. Eine schnellere Operation wäre

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

Bei einem Array mit 1000 Elementen ist der Unterschied recht gering.

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);
?>

Ausgabe:

float (0.23605012893677)

float (0.24102783203125)

1
alexn

Arbeitscode von meiner Website zum Überspringen des ersten Ergebnisses und dann weiter.

<?php 

$counter = 0;

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

Es funktioniert auf opencart auch in tpl-Datei, mach das, falls du es brauchst.

1
Dheeraj Verma

Wie wäre es mit so etwas? Lesen Sie dann die erste Taste und den ersten Wert mit key() und current() ab array_shift(), um das vordere Element aus dem Array zu entfernen (BEARBEITEN: Verwenden Sie nicht array_shift(), es nummeriert alle numerischen Indizes im Array neu, die Sie nicht immer wollen!).

 <? php 
 
 $ arr = array (
 
 'one' => "ONE !!", 
 ' zwei '=> "ZWEI !!", 
' drei '=> "BAUM", 
 4 => "Viertes Element", 
 99 => "Wir haben einige übersprungen hier .. "
 
); 
 
 $ firstKey = key ($ arr); 
 $ firstVal = current ($ arr); 
 
 Echo ("
OK, die ersten Werte sind $ firstKey, $ firstVal "); ####array_shift ($ arr); # 'dequeue' Frontelement # SCHLECHT! renumbers! unset ($ arr [$ firstKey]); # BESSER! Echo ("
Nun zu den anderen "); Foreach ($ arr als $ 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