У меня есть следующий код:
if ($_POST['submit'] == "Next") {
foreach($_POST['info'] as $key => $value) {
echo $value;
}
}
Как мне получить функцию foreach для запуска со второго ключа в массиве?
У меня есть следующий код:
if ($_POST['submit'] == "Next") {
foreach($_POST['info'] as $key => $value) {
echo $value;
}
}
Как мне получить функцию foreach для запуска со второго ключа в массиве?
Для достаточно небольших массивов используйте 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)
float (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;
}
}
если вы структурируете свою форму иначе
<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()
, затем (EDIT: Не использовать array_shift()
, чтобы удалить из переднего элемента из массива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
" ) ; ####Now for the rest of them
" ) ; foreach( $arr as $key= > $val ) { echo( "$key = > $val
" ) ; } ? >