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
nhờ @Robert .. nó giúp! – iamnards
Dễ dàng và làm việc :) bạn được chào đón. – Robert