如何跳过数组循环中的第一个键?

时间:2008-12-16 14:52:25

标签: php arrays

我有以下代码:

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

如何让foreach函数从数组中的第二个键开始?

12 个答案:

答案 0 :(得分:109)

对于相当小的数组,使用array_slice创建第二个数组:

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

答案 1 :(得分:41)

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

答案 2 :(得分:23)

难道你不能解开数组...

所以,如果我有一个我不想要第一个实例的数组, 我可以:

unset($array[0]);

这将从数组中删除实例。

答案 3 :(得分:6)

如果您正在使用普通数组,我会说使用类似

的内容

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

但是,由于您正在查看用户请求,因此您对可能返回参数的顺序没有任何实际保证 - 某些浏览器/代理可能会更改其行为,或者您可能只是决定修改形式在未来。无论哪种方式,忽略数组的排序并将POST值视为无序哈希映射符合您的最佳利益,为您提供两个选项:

  • 复制数组并unset要忽略的密钥
  • 遍历整个数组,并在看到您要忽略的密钥时continue

答案 4 :(得分:4)

循环:

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

答案 5 :(得分:3)

替代方法是使用数组指针:

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

答案 6 :(得分:2)

如果您愿意抛弃第一个元素,可以使用array_shift()。但是,这在庞大的阵列上很慢。更快的操作将是

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

答案 7 :(得分:1)

在一个填充了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)

答案 8 :(得分:1)

我的网站上的工作代码,用于跳过第一个结果,然后继续。

<?php 

$counter = 0;

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

在tpl文件中也可以使用opencart,如果需要,可以这样做。

答案 9 :(得分:0)



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

答案 10 :(得分:0)

如果您以不同方式构建表单

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

...您现在可以循环遍历该特定结构并正常访问休息

答案 11 :(得分:0)

这样的事情怎么样?使用key()current()读取第一个键和值,然后使用 array_shift()将前元素从数组中取出(编辑:不要使用{{ 1}},它重新编号数组中的任何数字索引,你并不总是想要!)。

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

" ) ; } ?>