Подтвердить что ты не робот

Как пропустить 1-й ключ в цикле массива?

У меня есть следующий код:

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

Как мне получить функцию foreach для запуска со второго ключа в массиве?

4b9b3361

Ответ 1

Для достаточно небольших массивов используйте array_slice, чтобы создать вторую:

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

Ответ 2

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

Альтернативно, если вы не хотите копировать массив, который вы могли бы просто сделать:

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

Ответ 3

Не могли бы вы просто отключить массив...

Итак, если бы у меня был массив, где мне не нужен первый экземпляр, Я мог бы просто:

unset($array[0]);

и это приведет к удалению экземпляра из массива.

Ответ 4

Если вы работали с обычным массивом, я бы сказал, чтобы использовать что-то вроде

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

но, поскольку вы смотрите на запрос пользователя, у вас нет никаких реальных гарантий относительно порядка, в котором могут быть возвращены аргументы - некоторые браузеры/прокси могут изменить свое поведение, или вы можете просто решить изменить свой формы в будущем. В любом случае, в ваших интересах игнорировать упорядочение массива и рассматривать значения POST как неупорядоченную хеш-карту, оставляя вам два варианта:

  • скопируйте массив и unset ключ, который вы хотите игнорировать
  • цикл через весь массив и continue при просмотре ключа, который вы хотите игнорировать

Ответ 5

в цикле:

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

Ответ 6

Альтернативный способ - использовать указатели массива:

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

Ответ 7

Если вы хотите выбросить первый элемент, вы можете использовать array_shift(). Однако это происходит медленно на огромном массиве. Более быстрая операция была бы

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

Ответ 8

В массиве, заполненном 1000 элементами, разница минимальна.

Тест:

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

Вывод:

поплавок (+0,23605012893677)

float (0.24102783203125)

Ответ 9

Рабочий код с моего сайта для пропущения первого результата и затем продолжения.

<?php 

$counter = 0;

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

Он работает с opencart также в файле tpl, если вам это нужно.

Ответ 10



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

Ответ 11

если вы структурируете свою форму иначе

  <input type='text' name='quiz[first]' value=""/>
  <input type='text' name='quiz[second]' value=""/>

... затем в вашем PHP

if( isset($_POST['quiz']) AND 
    is_array($_POST['quiz'])) {

    //...and we'll skip $_POST['quiz']['first'] 
    foreach($_POST['quiz'] as $key => $val){
      if($key == "first") continue;
      print $val; 
    }
}

... теперь вы можете просто контактировать с этой конкретной структурой и нормально нормально работать

Ответ 12

Как насчет чего-то подобного? Считайте первый ключ и значение с помощью key() и current(), затем array_shift(), чтобы удалить из переднего элемента из массива (EDIT: Не использовать array_shift(), он репрезентирует любые числовые индексы в массиве, которые вы не всегда хотите!).

    <?php

    $arr = array(

      'one' => "ONE!!",
      'two' => "TWO!!",
      'three' => "TREE",
      4 => "Fourth element",
      99 => "We skipped a few here.."

    ) ;

    $firstKey = key( $arr ) ;
    $firstVal = current( $arr ) ;

    echo( "

OK, first values are $firstKey, $firstVal

" ) ; ####array_shift( $arr ) ; #'dequeue' front element # BAD! renumbers! unset( $arr[ $firstKey ] ) ; # BETTER! echo( "

Now for the rest of them

" ) ; foreach( $arr as $key= > $val ) { echo( "

$key = > $val

" ) ; } ? >