如何跳过数组循环中的第一个键?
我有以下代码:
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
“); } ?>