是否可以从特定元素 [第六个元素] 开始一个 foreach 循环?
我正在使用此代码:
<?php
$num=1;
foreach($temp_row as $key => $value) {
echo $num;
$num++;
}
?>
谢谢 :)
您可以使用例如array_slice()
$num = 5; //it will start from sixth element
foreach(array_slice($temp_row, $num) as $key => $value) {
echo $key.'=>'.$value.'<br>';
}
不直接用foreach()
. 线索在each
名字的一部分。它循环遍历所有元素。
那么我们怎样才能实现呢?
在执行其余工作之前,您总是可以if()
在循环中使用一个子句来检查键值。
但是,如果这对您不可行,无论出于何种原因,我都建议使用 aFilterIterator
来实现这一目标。
这FilterIterator
是一个标准的 PHP 类,您可以扩展它来创建自己的过滤器。然后可以使用标准foreach()
循环循环迭代器,只拾取过滤器接受的记录。
上面链接的手册页上有一些示例会有所帮助,但这是我为您整理的一个快速示例:
class SkipTopFilter extends FilterIterator {
private $filterNum = 0;
public function __construct(array $array, $filter) {
parent::__construct(new ArrayIterator($array));
$this->filterNum = $filter;
}
public function accept() {
return ($this->getInnerIterator()->key() >= $this->filterNum);
}
}
$myArray = array(13,6,8,3,22,88,12,656,78,188,99);
foreach(new SkipTopFilter($myArray, 6) as $key=>$value) {
//loop through all records except top six.
print "rec: $key => $value<br />";
}
经测试;输出:
rec: 6 => 12
rec: 7 => 656
rec: 8 => 78
rec: 9 => 188
rec: 10 => 99
如果计数器不是第 6 个元素,您可以跳过...
<?php
$num=0;
foreach($temp_row as $key => $value) {
if( ++$num < 6 )
{
continue;
}
echo $num;
}
?>
或使用 for 循环
$num = 1;
for($i=5; $i<= count($temp_row), $i++) {
echo $num;
$num++;
}
试试这个代码:
$new_temp_row = array_slice($temp_row, 5);
foreach($new_temp_row as $key => $value) {
echo $value;
}
$i = 1;
foreach ($temp_row as $key => $value) {
if (($num = $i++) < 6) continue;
// Do something
}
或者
for ($i = 0; $i < 5; $i++) next($temp_row);
while(list($key, $value) = each($temp_row)) {
// Do something
}
我建议您使用 for 外观而不是 for each。然后,您可以访问循环内 i 位置的键和值。
<?php
$num = 1;
$keys = array_keys( $temp_row );
for( $i = 5; $i < count( $temp_row ); $i++ ) {
$key = $keys[$i];
$val = $temp_row[$i];
echo $i;
}
?>
您可以使用原始数组的所需数据部分创建新数组并使用它:
$process = array_slice ($temp_row, 5);
foreach($process as $key => $value) {
//TODO Your logic
}
或者您可以跳过第一个 siel 元素:
<?php
$num=1;
foreach($temp_row as $key => $value) {
if ($num < 6) {
$num++;
continue;
}
//TODO Your logic
}
?>