Λειτουργίες συστοιχίας
Αυτή η σελίδα αφορά τις κλάσεις Nette\Utils\Arrays, ArrayHash και ArrayList, οι οποίες σχετίζονται με τους πίνακες.
Εγκατάσταση:
Arrays
Nette\Utils\Arrays είναι μια στατική κλάση, η οποία περιέχει μια χούφτα από εύχρηστες συναρτήσεις πίνακα. Το ισοδύναμό της για τους επαναλήπτες είναι η Nette\Utils\Iterables.
Τα παραδείγματα που ακολουθούν υποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο της κλάσης:
associate(array $array, mixed $path): array|\stdClass
Η συνάρτηση μετατρέπει ευέλικτα το $array
σε συσχετιστικό πίνακα
ή αντικείμενα σύμφωνα με την καθορισμένη διαδρομή $path
. Η
διαδρομή μπορεί να είναι μια συμβολοσειρά ή ένας πίνακας. Αποτελείται
από τα ονόματα των κλειδιών του πίνακα εισόδου και τελεστές όπως ‚[]‘,
‚->‘, ‚=‘ και ‚|‘. Πετάει το Nette\InvalidArgumentException
αν η διαδρομή
είναι άκυρη.
contains(array $array, $value): bool
Ελέγχει έναν πίνακα για την παρουσία τιμής. Χρησιμοποιεί αυστηρή
σύγκριση (===
)
every(array $array, callable $predicate): bool
Ελέγχει αν όλα τα στοιχεία του πίνακα περνούν τον έλεγχο που
υλοποιείται από την παρεχόμενη συνάρτηση, η οποία έχει την υπογραφή
function ($value, $key, array $array): bool
.
Βλέπε some().
filter(array $array, callable $predicate): array
Επιστρέφει έναν νέο πίνακα που περιέχει όλα τα ζεύγη κλειδιών-τιμών
που ταιριάζουν με το δεδομένο $predicate
. Το callback έχει την υπογραφή
function ($value, int|string $key, array $array): bool
.
first(array $array, ?callable $predicate=null, ?callable $else=null): mixed
Επιστρέφει το πρώτο στοιχείο (που ταιριάζει με το καθορισμένο
κατηγόρημα, αν δίνεται). Εάν δεν υπάρχει τέτοιο στοιχείο, επιστρέφει το
αποτέλεσμα της κλήσης του $else
ή null. Το $predicate
έχει την
υπογραφή function ($value, int|string $key, array $array): bool
.
Δεν αλλάζει τον εσωτερικό δείκτη σε αντίθεση με το reset()
. Οι
παράμετροι $predicate
και $else
υπάρχουν από την έκδοση 4.0.4.
Βλέπε last().
firstKey(array $array, ?callable $predicate=null): int|string|null
Επιστρέφει το κλειδί του πρώτου στοιχείου (που ταιριάζει με το
καθορισμένο κατηγόρημα, αν δίνεται) ή null αν δεν υπάρχει τέτοιο
στοιχείο. Το $predicate
έχει την υπογραφή
function ($value, int|string $key, array $array): bool
.
Βλέπε lastKey().
flatten(array $array, bool $preserveKeys=false): array
Μετατρέπει πολυδιάστατο πίνακα σε επίπεδο πίνακα.
get(array $array, string|int|array $key, ?mixed $default=null): mixed
Επιστρέφει $array[$key]
item. Εάν δεν υπάρχει, απορρίπτεται το
Nette\InvalidArgumentException
, εκτός εάν έχει οριστεί μια προεπιλεγμένη τιμή
ως τρίτο όρισμα.
Το επιχείρημα $key
μπορεί επίσης να είναι ένας πίνακας.
getRef(array &$array, string|int|array $key): mixed
Λαμβάνει αναφορά στο δεδομένο $array[$key]
. Αν το ευρετήριο δεν
υπάρχει, δημιουργείται νέο με τιμή null
.
Λειτουργεί με πολυδιάστατους πίνακες καθώς και με την get().
grep(array $array, string $pattern, bool $invert=false): array
Επιστρέφει μόνο εκείνα τα στοιχεία του πίνακα, τα οποία ταιριάζουν με
μια κανονική έκφραση $pattern
. Εάν $invert
είναι true
,
επιστρέφει τα στοιχεία που δεν ταιριάζουν. Σφάλμα μεταγλώττισης Regex ή
σφάλμα χρόνου εκτέλεσης εκπέμπει Nette\RegexpException
.
insertAfter(array &$array, string|int|null $key, array $inserted): void
Εισάγει τα περιεχόμενα του πίνακα $inserted
στο $array
αμέσως
μετά το $key
. Εάν το $key
είναι null
(ή δεν υπάρχει),
εισάγεται στο τέλος.
insertBefore(array &$array, string|int|null $key, array $inserted): void
Εισάγει τα περιεχόμενα του πίνακα $inserted
στο $array
πριν
από το $key
. Εάν το $key
είναι null
(ή δεν υπάρχει),
εισάγεται στην αρχή.
invoke(iterable $callbacks, …$args): array
Προκαλεί όλα τα callbacks και επιστρέφει πίνακα αποτελεσμάτων.
invokeMethod(iterable $objects, string $method, …$args): array
Καλεί τη μέθοδο σε κάθε αντικείμενο ενός πίνακα και επιστρέφει πίνακα αποτελεσμάτων.
isList(array $array): bool
Ελέγχει αν ο πίνακας είναι δεικτοδοτημένος με αύξουσα σειρά αριθμητικών κλειδιών από το μηδέν, δηλαδή λίστα.
last(array $array, ?callable $predicate=null, ?callable $else=null): mixed
Επιστρέφει το τελευταίο στοιχείο (που ταιριάζει με το καθορισμένο
κατηγόρημα, αν δίνεται). Εάν δεν υπάρχει τέτοιο στοιχείο, επιστρέφει το
αποτέλεσμα της κλήσης του $else
ή null. Το $predicate
έχει την
υπογραφή function ($value, int|string $key, array $array): bool
.
Δεν αλλάζει τον εσωτερικό δείκτη σε αντίθεση με το end()
. Οι
παράμετροι $predicate
και $else
υπάρχουν από την έκδοση 4.0.4.
Βλέπε first().
lastKey(array $array, ?callable $predicate=null): int|string|null
Επιστρέφει το κλειδί του τελευταίου στοιχείου (που ταιριάζει με το
καθορισμένο κατηγόρημα, αν δίνεται) ή null αν δεν υπάρχει τέτοιο
στοιχείο. Το $predicate
έχει την υπογραφή
function ($value, int|string $key, array $array): bool
.
Βλέπε firstKey().
map(array $array, callable $transformer): array
Καλεί το $transformer
σε όλα τα στοιχεία του πίνακα και επιστρέφει
τον πίνακα των τιμών επιστροφής. Η ανάκληση έχει την υπογραφή
function ($value, $key, array $array): bool
.
mapWithKeys(array $array, callable $transformer): array
Δημιουργεί έναν νέο πίνακα μετασχηματίζοντας τις τιμές και τα
κλειδιά του αρχικού πίνακα. Η συνάρτηση $transformer
έχει την
υπογραφή function ($value, $key, array $array): ?array{$newValue, $newKey}
. Εάν η
$transformer
επιστρέφει null
, το στοιχείο παραλείπεται. Για
στοιχεία που διατηρούνται, το πρώτο στοιχείο του επιστρεφόμενου
πίνακα χρησιμοποιείται ως το νέο κλειδί και το δεύτερο στοιχείο ως η
νέα τιμή.
Αυτή η μέθοδος είναι χρήσιμη σε περιπτώσεις όπου πρέπει να αλλάξετε τη δομή ενός πίνακα (και τα κλειδιά και τις τιμές ταυτόχρονα) ή να φιλτράρετε στοιχεία κατά τη διάρκεια του μετασχηματισμού (επιστρέφοντας null για ανεπιθύμητα στοιχεία).
mergeTree(array $array1, array $array2): array
Συγχωνεύει αναδρομικά δύο πεδία. Είναι χρήσιμη, για παράδειγμα, για
τη συγχώνευση δενδρικών δομών. Συμπεριφέρεται όπως ο τελεστής +
για τον πίνακα, δηλαδή προσθέτει ένα ζεύγος κλειδιού/τιμής από τον
δεύτερο πίνακα στον πρώτο και διατηρεί την τιμή από τον πρώτο πίνακα σε
περίπτωση σύγκρουσης κλειδιών.
Οι τιμές από τον δεύτερο πίνακα προστίθενται πάντα στον πρώτο. Η
εξαφάνιση της τιμής 10
από τον δεύτερο πίνακα μπορεί να φαίνεται
λίγο συγκεχυμένη. Θα πρέπει να σημειωθεί ότι αυτή η τιμή καθώς και η
τιμή 5
in the first array have the same numeric key 0
, οπότε στο πεδίο που
προκύπτει υπάρχει μόνο ένα στοιχείο από τον πρώτο πίνακα.
normalize(array $array, ?string $filling=null): array
Κανονικοποιεί τον πίνακα σε συσχετιστικό πίνακα. Αντικαθιστά τα
αριθμητικά κλειδιά με τις τιμές τους, η νέα τιμή θα είναι $filling
.
pick(array &$array, string|int $key, ?mixed $default=null): mixed
Επιστρέφει και αφαιρεί την τιμή ενός στοιχείου από έναν πίνακα. Εάν
δεν υπάρχει, πετάει μια εξαίρεση ή επιστρέφει $default
, εάν
παρέχεται.
renameKey(array &$array, string|int $oldKey, string|int $newKey): bool
Μετονομάζει ένα κλειδί. Επιστρέφει true
εάν το κλειδί βρέθηκε
στον πίνακα.
getKeyOffset(array $array, string|int $key): ?int
Επιστρέφει τη μηδενική θέση του κλειδιού του συγκεκριμένου πίνακα.
Επιστρέφει null
εάν το κλειδί δεν βρεθεί.
some(array $array, callable $predicate): bool
Ελέγχει αν τουλάχιστον ένα στοιχείο του πίνακα περνάει το τεστ που
υλοποιείται από την παρεχόμενη κλήση με υπογραφή
function ($value, $key, array $array): bool
.
Βλέπε every().
toKey(mixed $key): string|int
Μετατρέπει μια τιμή σε κλειδί πίνακα, το οποίο είναι είτε ακέραιος αριθμός είτε συμβολοσειρά.
toObject(iterable $array, object $object): object
Αντιγράφει τα στοιχεία του πίνακα $array
στο αντικείμενο
$object
και στη συνέχεια το επιστρέφει.
wrap(array $array, string
$prefix=''
, string $suffix=''
): array
Μετατρέπει κάθε στοιχείο του πίνακα σε συμβολοσειρά και το
περικλείει με τα $prefix
και $suffix
.
ArrayHash
Το αντικείμενο Nette\Utils\ArrayHash είναι ο απόγονος της γενικής κλάσης stdClass και την επεκτείνει με τη δυνατότητα να τη μεταχειρίζεται ως πίνακα, για παράδειγμα, προσπελαύνεται τα μέλη της με τη χρήση τετραγωνικών αγκυλών:
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση count($hash)
για να λάβετε
τον αριθμό των στοιχείων.
Μπορείτε να κάνετε επανάληψη σε ένα αντικείμενο όπως θα κάνατε σε έναν πίνακα, ακόμη και με μια αναφορά:
Οι υπάρχοντες πίνακες μπορούν να μετατραπούν σε ArrayHash
χρησιμοποιώντας το from()
:
Ο μετασχηματισμός είναι αναδρομικός:
Μπορεί να αποφευχθεί με τη δεύτερη παράμετρο:
Μετασχηματισμός πίσω στον πίνακα:
ArrayList
Nette\Utils\ArrayList αναπαριστά έναν γραμμικό πίνακα όπου οι δείκτες είναι μόνο ακέραιοι αριθμοί που αυξάνονται από το 0.
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση count($list)
για να λάβετε
τον αριθμό των στοιχείων.
Μπορείτε να κάνετε επανάληψη σε ένα αντικείμενο όπως θα κάνατε σε έναν πίνακα, ακόμη και με μια αναφορά:
Οι υπάρχοντες πίνακες μπορούν να μετατραπούν σε ArrayList
χρησιμοποιώντας το from()
:
Η πρόσβαση σε κλειδιά πέραν των επιτρεπόμενων τιμών προκαλεί
εξαίρεση Nette\OutOfRangeException
:
Η αφαίρεση του κλειδιού θα έχει ως αποτέλεσμα την αναρίθμηση των στοιχείων:
Μπορείτε να προσθέσετε ένα νέο στοιχείο στην αρχή χρησιμοποιώντας το
prepend()
: