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

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

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

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

Solutions Collecting From Web of "Как пропустить 1-й ключ в цикле массива?"

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

 foreach(array_slice($_POST['info'],1) as $key=>$value) { echo $value; } 
 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; } 

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

Поэтому, если бы у меня был массив, в котором я не хотел бы первого экземпляра, я мог бы просто:

 unset($array[0]); 

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

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

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

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

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

в цикле:

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

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

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

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

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

На массиве, заполненном 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)

Поплавок (+0,24102783203125)

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

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

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

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

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

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

… теперь вы можете просто перебрать эту конкретную структуру и нормально отдохнуть

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

     <? PHP

     $ arr = массив (

       'one' => "ONE !!",
       'two' => "TWO !!",
       'three' => "TREE",
       4 => «Четвертый элемент»,
       99 => «Мы пропустили несколько здесь ...»

     );

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

     эхо (" 

ОК, первые значения: $ firstKey, $ firstVal

"); #### array_shift ($ arr); Элемент 'dequeue' переднего элемента # ПЛОХО! перенумеровывает! unset ($ arr [$ firstKey]); # ЛУЧШЕ! эхо ("

Теперь для остальных

"); foreach ($ arr как $ key => $ val) { эхо ("

$ key => $ val

"); } ?>