Λειτουργίες επαναλήπτη

Nette\Utils\Iterables είναι μια στατική κλάση με συναρτήσεις για την εργασία με επαναλήπτες. Η αντίστοιχη κλάση για πίνακες είναι η Nette\Utils\Arrays.

Εγκατάσταση:

composer require nette/utils

Όλα τα παραδείγματα προϋποθέτουν τη δημιουργία ενός ψευδώνυμου:

use Nette\Utils\Iterables;

contains(iterable $iterable, $value)bool

Ελέγχει την παρουσία μιας τιμής στον επαναλήπτη. Χρησιμοποιεί αυστηρή σύγκριση (===).

Iterables::contains(new ArrayIterator([1, 2, 3]), 1);    // true
Iterables::contains(new ArrayIterator([1, 2, 3]), '1');  // false

containsKey(iterable $iterable, $value)bool

Ελέγχει την παρουσία ενός κλειδιού στον επαναλήπτη. Χρησιμοποιεί αυστηρή σύγκριση (===).

Iterables::containsKey(new ArrayIterator([1, 2, 3]), 0);  // true
Iterables::containsKey(new ArrayIterator([1, 2, 3]), 4);  // false

every(iterable $iterable, callable $predicate)bool

Ελέγχει αν όλα τα στοιχεία του επαναλήπτη περνούν ένα τεστ που υλοποιείται στο $predicate με την υπογραφή function ($value, $key, iterable $iterable): bool.

$iterator = new ArrayIterator([1, 30, 39, 29, 10, 13]);
$isBelowThreshold = fn($value) => $value < 40;
$res = Iterables::every($iterator, $isBelowThreshold); // true

Βλέπε some().

filter(iterable $iterable, callable $predicate): Generator

Επαναλήπτης που φιλτράρει τα στοιχεία σύμφωνα με ένα κατηγόρημα. Το κατηγόρημα έχει την υπογραφή function ($value, $key, iterable $iterable): bool. Διατηρεί τα αρχικά κλειδιά.

$iterator = new ArrayIterator([1, 2, 3]);
$iterator = Iterables::filter($iterator, fn($v) => $v < 3);
// 1, 2

first(iterable $iterable, ?callable $predicate=null, ?callable $else=null)mixed

Επιστρέφει το πρώτο στοιχείο (που ταιριάζει με το κατηγόρημα, αν έχει καθοριστεί). Εάν δεν υπάρχει τέτοιο στοιχείο, επιστρέφει το αποτέλεσμα της κλήσης του $else ή null. Η παράμετρος $predicate έχει την υπογραφή function ($value, $key, iterable $iterable): bool.

Iterables::first(new ArrayIterator([1, 2, 3]));                   // 1
Iterables::first(new ArrayIterator([1, 2, 3]), fn($v) => $v > 2); // 3
Iterables::first(new ArrayIterator([]));                          // null
Iterables::first(new ArrayIterator([]), else: fn() => false);     // false

firstKey(iterable $iterable, ?callable $predicate=null, ?callable $else=null)mixed

Επιστρέφει το κλειδί του πρώτου στοιχείου (που ταιριάζει με το κατηγόρημα, αν έχει καθοριστεί). Εάν δεν υπάρχει τέτοιο στοιχείο, επιστρέφει το αποτέλεσμα της κλήσης του $else ή null. Το κατηγόρημα έχει την υπογραφή function ($value, $key, iterable $iterable): bool.

Iterables::firstKey(new ArrayIterator([1, 2, 3]));                   // 0
Iterables::firstKey(new ArrayIterator([1, 2, 3]), fn($v) => $v > 2); // 2
Iterables::firstKey(new ArrayIterator(['a' => 1, 'b' => 2]));        // 'a'
Iterables::firstKey(new ArrayIterator([]));                          // null

map(iterable $iterable, callable $transformer)array

Επαναλήπτης που μετασχηματίζει τις τιμές καλώντας το $transformer. Έχει την υπογραφή function ($value, $key, iterable $iterable): bool. Διατηρεί τα αρχικά κλειδιά.

$iterator = new ArrayIterator([1, 2, 3]);
$iterator = Iterables::map($iterator, fn($v) => $v * 2);
// 2, 4, 6

some(iterable $iterable, callable $predicate)bool

Ελέγχει αν τουλάχιστον ένα στοιχείο του επαναλήπτη περνάει ένα τεστ που υλοποιείται στο $predicate με την υπογραφή function ($value, $key, iterable $iterable): bool.

$iterator = new ArrayIterator([1, 30, 39, 29, 10, 13]);
$isEven = fn($value) => $value % 2 === 0;
$res = Iterables::some($iterator, $isEven); // true

Βλέπε every().

έκδοση: 4.0