2013-05-24 30 views

Trả lời

16

Bạn có thể sử dụng ví dụ array_slice()

$num = 5; //it will start from sixth element 

foreach(array_slice($temp_row, $num) as $key => $value) { 

    echo $key.'=>'.$value.'<br>'; 
} 
+0

nhờ @Robert .. nó giúp! – iamnards

+0

Dễ dàng và làm việc :) bạn được chào đón. – Robert

2

bạn có thể bỏ qua nếu truy cập không phải là yếu tố thứ 6 ...

<?php 
$num=0; 
foreach($temp_row as $key => $value) { 
    if(++$num < 6) 
    { 
     continue; 
    } 
    echo $num; 
} 
?> 
+0

không phải là giải pháp tuyệt vời ... nếu hàng nghìn mục bị bỏ qua thì sao? –

+0

vâng - không phải là tốt nhất nếu bạn bỏ qua nhiều mục hơn nhưng bộ nhỏ của nó sẽ không bị đau. luôn thương mại với loại điều này. –

0
$i = 1; 
foreach ($temp_row as $key => $value) { 
    if (($num = $i++) < 6) continue; 
    // Do something 
} 

Hoặc

for ($i = 0; $i < 5; $i++) next($temp_row); 
while(list($key, $value) = each($temp_row)) { 
    // Do something 
} 
0

Tôi đề nghị bạn sử dụng một cái nhìn thay vì một cho mỗi. Sau đó, bạn có thể truy cập cả khóa và giá trị ở vị trí i bên trong vòng lặp của bạn.

<?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; 
} 
?> 
2

Hoặc với một vòng lặp for

$num = 1; 
for($i=5; $i<= count($temp_row), $i++) { 
    echo $num; 
    $num++; 
} 
+2

nó sẽ là tốt hơn để tính toán số ($ temp_row) bên ngoài vòng lặp cho –

+0

nó có thể được bên trong, 'cho ($ i = 5, $ cnt = đếm ($ temp_row); $ i <= $ cnt, ++ $ i) ';) – Robert

1

thử mã này:

$new_temp_row = array_slice($temp_row, 5); 

foreach($new_temp_row as $key => $value) { 
    echo $value; 
} 
0

Bạn có thể tạo mảng mới với cần thiết phần dữ liệu của mảng gốc d làm việc với nó:

$process = array_slice ($temp_row, 5); 
foreach($process as $key => $value) { 

    //TODO Your logic 
} 

Hoặc bạn có thể skipp elments siel đầu tiên:

<?php 
$num=1; 
foreach($temp_row as $key => $value) { 
    if ($num < 6) { 
     $num++; 
     continue; 
    } 
    //TODO Your logic 
} 
?> 
+1

chỉ ... chỉ cần xóa gợi ý thứ hai của bạn. nếu anh ta phải bỏ qua 100000 yếu tố thì sao? –

6

Không trực tiếp với một foreach(). Đầu mối nằm ở phần each của tên. Nó lặp qua các thành phần tất cả.

Vậy làm thế nào chúng ta có thể đạt được nó?

Bạn luôn có thể có mệnh đề if() bên trong vòng lặp kiểm tra giá trị khóa trước khi thực hiện phần còn lại của tác phẩm.

Nhưng nếu điều đó không phù hợp với bạn, vì lý do gì đó, tôi khuyên bạn nên sử dụng FilterIterator để đạt được điều này.

FilterIterator là lớp PHP chuẩn mà bạn có thể mở rộng để tạo bộ lọc của riêng mình. Trình vòng lặp có thể được lặp lại bằng cách sử dụng vòng lặp tiêu chuẩn foreach(), chỉ chọn các bản ghi được bộ lọc chấp nhận.

Có một số ví dụ về các trang hướng dẫn liên kết ở trên sẽ giúp đỡ, nhưng đây là một ví dụ nhanh Tôi đã ném nhau cho bạn:

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 />"; 
} 

Tested; kết quả đầu ra:

rec: 6 => 12 
rec: 7 => 656 
rec: 8 => 78 
rec: 9 => 188 
rec: 10 => 99 
Các vấn đề liên quan