【问题标题】:skipping first entry of a foreach loop跳过 foreach 循环的第一个条目
【发布时间】:2015-12-29 23:46:39
【问题描述】:

我想跳过foreach循环的第一个入口,我知道一种方法,但是它使用了很多代码行,我想知道是否有更简单的方法:

$i = 0;
foreach($url AS $u) {
    if($i!=0) $cats[check_url($u)] = $u;
    $i++;
}

有没有更好更正式的方式?

【问题讨论】:

  • foreach($url as $k=>$u){ if($k==0)continue; ... } 或者只是删除数组中的第一个值。或者使用 for 循环代替并从 1 开始。
  • 如何删除数组中的第一个值?
  • @JackQueen 使用 unset(array[0]);这样做
  • @JackQueen 要正确删除数组的第一个值,请使用array_shift()。如果需要使用,将其保存到变量中,如果不需要,只需使用函数即可。要删除最后一个元素,请使用array_pop()。使用数组函数!
  • @Zapp 不应该工作,他的$i++ 在循环内,所以使用continue 最终会跳过所有项目。

标签: php arrays loops foreach


【解决方案1】:

另一种可能的方法是使用 PHP 内置的 array_shift() 函数在循环之前从数组中弹出第一项。

如果您不确定 $url 数组的索引方式,只需使用 unset($url[0]) 删除索引 [0] 可能会也可能不会解决问题。例如,如果 $url 按关联进行索引,它可能看起来更像这样:

$url['first'] = "a value";
$url['second'] = "some other value";
$url['third'] = "a different value";

为了确定您排除了第一个“索引”元素,无论与之关联的键是什么,您都可以像这样使用 array_shift():

array_shift($url);

这会弹出第一个元素并重置()数组指针。

在此之后,您可以像往常一样执行您的 foreach 循环。

【讨论】:

    【解决方案2】:

    如果您有$url 的数字键,您可以这样做:

    foreach($url AS $k => $u) {
        if($k) $cats[check_url($u)] = $u;
    }
    

    但是如果你的数组有非数字键,我认为你拥有的是最好的方法!

    【讨论】:

      猜你喜欢
      • 2023-01-05
      • 2012-04-22
      • 1970-01-01
      • 2019-02-16
      • 2023-03-15
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多