Lặp lại PHP
PHP - Iterable là gì?
Iterable là bất kỳ giá trị nào có thể được lặp qua bằng vòng lặp foreach()
.
Kiểu giả iterable
lại đã được giới thiệu trong PHP 7.1 và nó có thể được sử dụng làm kiểu dữ liệu cho các đối số hàm và giá trị trả về của hàm.
PHP - Sử dụng Iterables
Từ khóa iterable
có thể được sử dụng làm kiểu dữ liệu của đối số hàm hoặc làm kiểu trả về của hàm:
Ví dụ
Sử dụng một đối số hàm lặp:
<?php
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
$arr = ["a",
"b", "c"];
printIterable($arr);
?>
Hãy tự mình thử »Ví dụ
Trả về một lần lặp:
<?php
function getIterable():iterable {
return ["a", "b", "c"];
}
$myIterable = getIterable();
foreach($myIterable as $item) {
echo $item;
}
?>
Hãy tự mình thử » PHP - Tạo các vòng lặp
Mảng
Tất cả các mảng đều có thể lặp lại, do đó, bất kỳ mảng nào cũng có thể được sử dụng làm đối số của hàm yêu cầu có thể lặp lại.
Trình vòng lặp
Bất kỳ đối tượng nào triển khai giao diện Iterator
đều có thể được sử dụng làm đối số của hàm yêu cầu iterable.
Một iterator chứa danh sách các mục và cung cấp các phương thức để lặp qua chúng. Nó giữ một con trỏ tới một trong các phần tử trong danh sách. Mỗi mục trong danh sách phải có một khóa có thể được sử dụng để tìm mục đó.
Một iterator phải có các phương thức sau:
-
current()
- Trả về phần tử mà con trỏ hiện đang trỏ tới. Nó có thể là bất kỳ loại dữ liệu nào -
key()
Trả về khóa được liên kết với phần tử hiện tại trong danh sách. Nó chỉ có thể là số nguyên, float, boolean hoặc chuỗi -
next()
Di chuyển con trỏ tới phần tử tiếp theo trong danh sách -
rewind()
Di chuyển con trỏ đến phần tử đầu tiên trong danh sách -
valid()
Nếu con trỏ bên trong không trỏ đến bất kỳ phần tử nào (ví dụ: nếu next() được gọi ở cuối danh sách), thì kết quả này sẽ trả về false. Nó trả về true trong mọi trường hợp khác
Ví dụ
Triển khai giao diện Iterator và sử dụng nó như một iterable:
<?php
// Create an Iterator
class MyIterator implements Iterator {
private $items = [];
private $pointer = 0;
public
function __construct($items) {
// array_values() makes
sure that the keys are numbers
$this->items =
array_values($items);
}
public function current() {
return $this->items[$this->pointer];
}
public function
key() {
return $this->pointer;
}
public function next() {
$this->pointer++;
}
public function rewind() {
$this->pointer =
0;
}
public function valid() {
// count() indicates how many items are in the list
return $this->pointer < count($this->items);
}
}
// A
function that uses iterables
function printIterable(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}
// Use the iterator as an iterable
$iterator = new MyIterator(["a", "b", "c"]);
printIterable($iterator);
?>
Hãy tự mình thử »