我有以下代码:
if ($_POST['submit'] == "Next") {
foreach($_POST['info'] as $key => $value) {
echo $value;
}
}
如何让foreach函数从数组中的第二个键开始?
答案 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()
读取第一个键和值,然后使用 (编辑:不要使用{{ 1}},它重新编号数组中的任何数字索引,你并不总是想要!)。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
" ) ; ####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
" ) ; } ?>