PHP:如何进行foreach并从集合的第六个元素开始?
是否可以从特定元素[第六个元素]开始foreach循环 我正在使用这个代码:PHP:如何进行foreach并从集合的第六个元素开始?,php,loops,foreach,Php,Loops,Foreach,是否可以从特定元素[第六个元素]开始foreach循环 我正在使用这个代码: <?php $num=1; foreach($temp_row as $key => $value) { echo $num; $num++; } ?> $new_temp_row = array_slice($temp_row, 5); foreach($new_temp_row as $key => $value
<?php
$num=1;
foreach($temp_row as $key => $value) {
echo $num;
$num++;
}
?>
$new_temp_row = array_slice($temp_row, 5);
foreach($new_temp_row as $key => $value) {
echo $value;
}
谢谢:)如果计数器不是第六个元素,您可以跳过
<?php
$num=0;
foreach($temp_row as $key => $value) {
if( ++$num < 6 )
{
continue;
}
echo $num;
}
?>
$i=1;
foreach($key=>$value的临时行){
如果($num=$i++)<6)继续;
//做点什么
}
或
用于($i=0;$i<5;$i++)下一个($temp_行);
while(列表($key,$value)=每个($temp_行)){
//做点什么
}
我建议您使用for look,而不是a 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;
}
?>
例如,您可以使用
$num=5//它将从第六元素开始
foreach(数组\u切片($temp\u row,$num)作为$key=>$value){
回显$key.'=>'.$value.'
';
}
或带有for循环
$num = 1;
for($i=5; $i<= count($temp_row), $i++) {
echo $num;
$num++;
}
$num=1;
对于($i=5;$i请尝试以下代码:
<?php
$num=1;
foreach($temp_row as $key => $value) {
echo $num;
$num++;
}
?>
$new_temp_row = array_slice($temp_row, 5);
foreach($new_temp_row as $key => $value) {
echo $value;
}
您可以使用原始阵列的所需数据部分创建新阵列,并使用它:
$process = array_slice ($temp_row, 5);
foreach($process as $key => $value) {
//TODO Your logic
}
或者您可以跳过第一个siel elments:
<?php
$num=1;
foreach($temp_row as $key => $value) {
if ($num < 6) {
$num++;
continue;
}
//TODO Your logic
}
?>
不直接使用foreach()
。线索在名称的每个部分。它在所有元素中循环
那么,我们如何才能实现这一目标呢
您可以在循环中始终有一个if()
子句,在执行其余工作之前检查键值
但是,如果这对你来说不可行,无论出于什么原因,我建议使用一种方法来实现这一点
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 />";
}
只是…删除你的第二个建议。如果他不得不跳过100000个元素呢?最好在for循环之外计算计数($temp_行),它可以在for循环内部,for($i=5,$cnt=count($temp_行)$这不是一个绝妙的解决方案…如果有成千上万的项目要跳过呢?是的-如果你跳过更多的项目,但小的设置不是最好的,这不会是一件痛苦的事。总是与这种事情进行权衡。
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