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

我有以下代码:

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

我如何使foreach函数从数组中的第二个键开始? 感谢名单。

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

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

难道你不能只是取消arrays…

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

 unset($array[0]); 

并且会从数组中移除实例。

如果你正在使用一个正常的数组,我会说使用类似的东西

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

但是,由于您正在查看用户请求,因此您无法确定返回参数的顺序 – 某些浏览器/代理可能会改变其行为,或者您可能会简单地决定在未来。 无论哪种方式,忽略数组的sorting并将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() 。 然而,这是一个巨大的arrays缓慢。 更快的操作将是

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

在装满1000个元素的数组中,差异非常小。

testing:

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

它也是在tpl文件中的opencart的工作,如果你需要这样做。

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

…你现在可以循环这个特定的结构,并正常访问rest

这样的事情呢? 然后使用key()current()读取第一个键和值 array_shift()从数组中取出前面的元素 (编辑:不要使用array_shift() ,它重新编号数组中的任何数字的指标,你不总是想要!)。

     <?PHP

     $ arr = array(

       'one'=>“一个!!”,
       'two'=>“两个!!”,
       '三'=>“树”,
       4 =>“第四元素”,
       99 =>“我们在这里略过了一些..”

     );

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

    回声(“ 

好的,第一个值是$ firstKey,$ firstVal

“); #### array_shift($ arr); #'出队'前面的元素 #坏! 重新编号! unset($ arr [$ firstKey]); #更好! 回声(“

现在为其余的人

“); foreach($ arr as $ key => $ val) { 回声(“

$ key => $ val

“); } ?>