有几种方法可以处理它,例如您可以取消设置数组中的第一个元素,然后对其进行迭代,但您也可以应用一个产生除第一个参数之外的所有参数并将数组作为参数传递的函数:
$num = ["20", "40", "89", "300", "190", "15"];
$new = 0;
$dropFirst = static fn ($_, string ...$a) => yield from $a;
foreach ($dropFirst(...$num) as $val) {
$new = $val;
echo "Value: $new\n";
}
我会说这取决于foreach 而不是$variable 的当前需求。
上面的$dropFirst 是一个快速、实用的Iterator(以Generator 子类型的形式),可以很容易地替换为其他更详细的内容。
例如您可以将数组包装在ArrayIterator 中,然后使用LimitIterator:
$num = ["20", "40", "89", "300", "190", "15"];
$iterator = new LimitIterator(
new ArrayIterator($num),
1
);
$new = 0;
foreach ($iterator as $val) {
$new = $val;
echo "Value: $new\n";
}
这当然是更多的代码行,但是您可以将限制迭代与完成的点(foreach)分开,仍然只传递一个变量(也称为控制反转)。
相反,您也可以将控件放入foreach 正文中,然后跳过第一个元素。例如一个简单的索引检查:
$num = ["20", "40", "89", "300", "190", "15"];
$new = 0;
foreach ($num as $index => $val) {
if (0 === $index) {
continue;
}
$new = $val;
echo "Value: $new\n";
}
因此,即使所有这些示例都有效 - 以及其他答案中的示例 - 您仍然需要考虑在您的情况下您想要控制的位置:
- 更改原始数据(重新定义)
- 更改
foreach'ed 的内容(代表)
- 更改
foreach 正文(现在)