Skip to content

Commit 23664eb

Browse files
committed
nette/utils 4.0.5
1 parent fb18de3 commit 23664eb

File tree

4 files changed

+101
-17
lines changed

4 files changed

+101
-17
lines changed

utils/cs/@home.texy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ composer require nette/utils
3535

3636
| verze | kompatibilní s PHP
3737
|-----------|-------------------
38-
| Nette Utils 4.0 | PHP 8.0 – 8.3
38+
| Nette Utils 4.0 | PHP 8.0 – 8.4
3939
| Nette Utils 3.2 | PHP 7.2 – 8.3
4040
| Nette Utils 3.0 – 3.1 | PHP 7.1 – 8.0
4141
| Nette Utils 2.5 | PHP 5.6 – 8.0

utils/cs/arrays.texy

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,29 @@ $res = Arrays::map($array, fn($value) => $value . $value);
310310
```
311311

312312

313+
mapWithKeys(array $array, callable $transformer): array .[method]
314+
-----------------------------------------------------------------
315+
316+
Tato metoda vytváří nové pole, kde jsou klíče a hodnoty transformovány pomocí zadané funkce `$transformer`. Funkce se aplikuje na každý prvek původního pole a vrací pole se dvěma prvky: nový klíč a nová hodnota. Pokud funkce vrátí null, daný prvek bude z výsledného pole vynechán.
317+
Callback má signaturu `function ($value, $key, array $array): ?array{$newKey, $newValue}`.
318+
319+
```php
320+
$array = ['a' => 1, 'b' => 2, 'c' => 3];
321+
$result = Arrays::mapWithKeys($array, function($value, $key) {
322+
if ($value % 2 === 0) {
323+
return [strtoupper($key), $value * 10];
324+
}
325+
return null; // Lichá čísla budou přeskočena
326+
});
327+
// $result je ['B' => 20]
328+
```
329+
330+
Tato metoda je užitečná v situacích, kdy potřebujete
331+
1. Změnit strukturu pole (klíče i hodnoty současně)
332+
2. Filtrovat prvky při transformaci (vracením null pro nežádoucí prvky)
333+
3. Vytvořit nové asociativní pole založené na původních datech
334+
335+
313336
mergeTree(array $array1, array $array2): array .[method]
314337
--------------------------------------------------------
315338

utils/cs/iterables.texy

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,20 @@ use Nette\Utils\Iterables;
2121
contains(iterable $iterable, $value): bool .[method]
2222
----------------------------------------------------
2323

24-
Testuje přítomnost hodnoty v iterátoru. Používá striktní porovnání (`===`).
24+
Hledá zadanou hodnotu v iterátoru. Používá striktní porovnání (`===`) pro ověření shody. Vrací `true`, pokud je hodnota nalezena, jinak `false`.
2525

2626
```php
2727
Iterables::contains(new ArrayIterator([1, 2, 3]), 1); // true
2828
Iterables::contains(new ArrayIterator([1, 2, 3]), '1'); // false
2929
```
3030

31+
Tato metoda je užitečná, když potřebujete rychle zjistit, zda se konkrétní hodnota v iterátoru nachází, aniž byste museli procházet všechny prvky ručně.
3132

32-
containsKey(iterable $iterable, $value): bool .[method]
33-
-------------------------------------------------------
3433

35-
Testuje přítomnost klíče v iterátoru. Používá striktní porovnání (`===`).
34+
containsKey(iterable $iterable, $key): bool .[method]
35+
-----------------------------------------------------
36+
37+
Hledá zadaný klíč v iterátoru. Používá striktní porovnání (`===`) pro ověření shody. Vrací `true`, pokud je klíč nalezen, jinak `false`.
3638

3739
```php
3840
Iterables::containsKey(new ArrayIterator([1, 2, 3]), 0); // true
@@ -43,34 +45,35 @@ Iterables::containsKey(new ArrayIterator([1, 2, 3]), 4); // false
4345
every(iterable $iterable, callable $predicate): bool .[method]
4446
--------------------------------------------------------------
4547

46-
Testuje, zda všechny prvky iterátoru projdou testem implementovaným v `$predicate` se signaturou `function ($value, $key, iterable $iterable): bool`.
48+
Ověřuje, zda všechny prvky iterátoru splňují podmínku definovanou v `$predicate`. Funkce `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool` a musí vracet `true` pro každý prvek, aby metoda `every()` vrátila `true`.
4749

4850
```php
4951
$iterator = new ArrayIterator([1, 30, 39, 29, 10, 13]);
5052
$isBelowThreshold = fn($value) => $value < 40;
5153
$res = Iterables::every($iterator, $isBelowThreshold); // true
5254
```
5355

54-
Viz [#some()].
56+
Tato metoda je užitečná pro ověření, zda všechny prvky v kolekci splňují určitou podmínku, například zda jsou všechna čísla menší než určitá hodnota.
5557

5658

5759
filter(iterable $iterable, callable $predicate): Generator .[method]
5860
--------------------------------------------------------------------
5961

60-
Iterátor, který filtruje prvky dle predikátu. Ten má signaturu `function ($value, $key, iterable $iterable): bool`. Zachovává původní klíče.
62+
Vytváří nový iterátor, který obsahuje pouze ty prvky z původního iterátoru, které splňují podmínku definovanou v `$predicate`. Funkce `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool` a musí vracet `true` pro prvky, které mají být zachovány.
6163

6264
```php
6365
$iterator = new ArrayIterator([1, 2, 3]);
6466
$iterator = Iterables::filter($iterator, fn($v) => $v < 3);
6567
// 1, 2
6668
```
6769

70+
Metoda využívá generátor, což znamená, že filtrování probíhá postupně při procházení výsledku. To je efektivní z hlediska paměti a umožňuje zpracovávat i velmi velké kolekce. Pokud neprojdete všechny prvky výsledného iterátoru, ušetříte výpočetní výkon, protože se nezpracují všechny prvky původního iterátoru.
71+
6872

6973
first(iterable $iterable, ?callable $predicate=null, ?callable $else=null): mixed .[method]
7074
-------------------------------------------------------------------------------------------
7175

72-
Vrátí první položku (odpovídající predikátu, je-li zadán). Pokud taková položka neexistuje, vrátí výsledek volání `$else` nebo null.
73-
Parametr `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool`.
76+
Vrací první prvek iterátoru. Pokud je zadán `$predicate`, vrací první prvek, který splňuje danou podmínku. Funkce `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool`. Pokud není nalezen žádný vyhovující prvek, volá se funkce `$else` (pokud je zadána) a vrací se její výsledek. Pokud `$else` není zadáno, vrací se `null`.
7477

7578
```php
7679
Iterables::first(new ArrayIterator([1, 2, 3])); // 1
@@ -79,11 +82,13 @@ Iterables::first(new ArrayIterator([])); // null
7982
Iterables::first(new ArrayIterator([]), else: fn() => false); // false
8083
```
8184

85+
Tato metoda je užitečná, když potřebujete rychle získat první prvek kolekce nebo první prvek splňující určitou podmínku, aniž byste museli procházet celou kolekci ručně.
86+
8287

8388
firstKey(iterable $iterable, ?callable $predicate=null, ?callable $else=null): mixed .[method]
8489
----------------------------------------------------------------------------------------------
8590

86-
Vrátí klíč první položky (odpovídající predikátu, je-li zadán). Pokud taková položka neexistuje, vrátí výsledek volání `$else` nebo null. Predikát má signaturu `function ($value, $key, iterable $iterable): bool`.
91+
Vrací klíč prvního prvku iterátoru. Pokud je zadán `$predicate`, vrací klíč prvního prvku, který splňuje danou podmínku. Funkce `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool`. Pokud není nalezen žádný vyhovující prvek, volá se funkce `$else` (pokud je zadána) a vrací se její výsledek. Pokud `$else` není zadáno, vrací se `null`.
8792

8893
```php
8994
Iterables::firstKey(new ArrayIterator([1, 2, 3])); // 0
@@ -93,27 +98,73 @@ Iterables::firstKey(new ArrayIterator([])); // null
9398
```
9499

95100

96-
map(iterable $iterable, callable $transformer): array .[method]
97-
---------------------------------------------------------------
101+
map(iterable $iterable, callable $transformer): Generator .[method]
102+
-------------------------------------------------------------------
98103

99-
Iterátor, který transformuje hodnoty voláním `$transformer`. Ten má signaturu `function ($value, $key, iterable $iterable): bool`. Zachovává původní klíče.
104+
Vytváří nový iterátor aplikováním funkce `$transformer` na každý prvek původního iterátoru. Funkce `$transformer` má signaturu `function ($value, $key, iterable $iterable): mixed` a její návratová hodnota se použije jako nová hodnota prvku.
100105

101106
```php
102107
$iterator = new ArrayIterator([1, 2, 3]);
103108
$iterator = Iterables::map($iterator, fn($v) => $v * 2);
104109
// 2, 4, 6
105110
```
106111

112+
Metoda využívá generátor, což znamená, že transformace probíhá postupně při procházení výsledku. To je efektivní z hlediska paměti a umožňuje zpracovávat i velmi velké kolekce. Pokud neprojdete všechny prvky výsledného iterátoru, ušetříte výpočetní výkon, protože se nezpracují všechny prvky původního iterátoru.
113+
114+
115+
mapWithKeys(iterable $iterable, callable $transformer): Generator .[method]
116+
---------------------------------------------------------------------------
117+
118+
Vytváří nový iterátor transformací hodnot a klíčů původního iterátoru. Funkce `$transformer` má signaturu `function ($value, $key, iterable $iterable): ?array{newValue, newKey}`. Pokud `$transformer` vrátí `null`, prvek je přeskočen. Pro zachované prvky se první prvek vráceného pole použije jako nový klíč a druhý prvek jako nová hodnota.
119+
120+
```php
121+
$iterator = new ArrayIterator(['a' => 1, 'b' => 2]);
122+
$iterator = Iterables::mapWithKeys($iterator, fn($v, $k) => $v > 1 ? [$v * 2, strtoupper($k)] : null);
123+
// [4 => 'B']
124+
```
125+
126+
Stejně jako `map()`, tato metoda využívá generátor pro postupné zpracování a efektivní práci s pamětí. To umožňuje pracovat s velkými kolekcemi a šetřit výpočetní výkon při částečném průchodu výsledkem.
127+
128+
129+
memoize(iterable $iterable): IteratorAggregate .[method]
130+
--------------------------------------------------------
131+
132+
Vytváří obal kolem iterátoru, který během iterace ukládá do mezipaměti jeho klíče a hodnoty. To umožňuje opakovanou iteraci dat bez nutnosti znovu procházet původní zdroj dat.
133+
134+
```php
135+
$iterator = /* data, která nelze iterovat vícekrát */
136+
$memoized = Iterables::memoize($iterator);
137+
// Nyní můžete iterovat $memoized vícekrát bez ztráty dat
138+
```
139+
140+
Tato metoda je užitečná v situacích, kdy potřebujete vícekrát projít stejnou sadu dat, ale původní iterátor neumožňuje opakovanou iteraci nebo by opakované procházení bylo nákladné (např. při čtení dat z databáze nebo souboru).
141+
107142

108143
some(iterable $iterable, callable $predicate): bool .[method]
109144
-------------------------------------------------------------
110145

111-
Testuje, zda alespoň jeden prvek iterátoru projde testem implementovaným v `$predicate` se signaturou `function ($value, $key, iterable $iterable): bool`.
146+
Ověřuje, zda alespoň jeden prvek iterátoru splňuje podmínku definovanou v `$predicate`. Funkce `$predicate` má signaturu `function ($value, $key, iterable $iterable): bool` a musí vracet `true` pro alespoň jeden prvek, aby metoda `some()` vrátila `true`.
112147

113148
```php
114149
$iterator = new ArrayIterator([1, 30, 39, 29, 10, 13]);
115150
$isEven = fn($value) => $value % 2 === 0;
116151
$res = Iterables::some($iterator, $isEven); // true
117152
```
118153

154+
Tato metoda je užitečná pro rychlé ověření, zda v kolekci existuje alespoň jeden prvek splňující určitou podmínku, například zda kolekce obsahuje alespoň jedno sudé číslo.
155+
119156
Viz [#every()].
157+
158+
159+
toIterator(iterable $iterable): Iterator .[method]
160+
--------------------------------------------------
161+
162+
Převádí jakýkoliv iterovatelný objekt (array, Traversable) na Iterator. Pokud je vstup již Iterator, vrátí ho beze změny.
163+
164+
```php
165+
$array = [1, 2, 3];
166+
$iterator = Iterables::toIterator($array);
167+
// Nyní máte Iterator místo pole
168+
```
169+
170+
Tato metoda je užitečná, když potřebujete zajistit, že máte k dispozici Iterator, bez ohledu na typ vstupních dat. To může být užitečné při vytváření funkcí, které pracují s různými typy iterovatelných dat.

utils/cs/strings.texy

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ Strings::match('žlutý!', '~\w+(!+)?~', captureOffset: true, utf8: true);
483483
```
484484

485485

486-
matchAll(string $subject, string $pattern, bool $captureOffset=false, int $offset=0, bool $unmatchedAsNull=false, bool $patternOrder=false, bool $utf8=false): array .[method]
487-
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
486+
matchAll(string $subject, string $pattern, bool $captureOffset=false, int $offset=0, bool $unmatchedAsNull=false, bool $patternOrder=false, bool $utf8=false, bool $lazy=false): array|Generator .[method]
487+
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
488488

489489
Hledá v řetězci všechny výskyty odpovídající regulárnímu výrazu a vrátí pole polí s nalezeným výrazem a jednotlivými podvýrazy.
490490

@@ -550,6 +550,16 @@ Strings::matchAll('žlutý kůň', '~\w+~', captureOffset: true, utf8: true);
550550
] */
551551
```
552552

553+
Pokud `$lazy` je `true`, funkce vrací `Generator` místo pole, což přináší významné výkonnostní výhody při práci s velkými řetězci. Generátor umožňuje vyhledávat shody postupně, místo celého řetězce najednou. To umožňuje efektivně pracovat i s extrémně velkými vstupními texty. Navíc můžete kdykoliv přerušit zpracování, pokud najdete hledanou shodu, což šetří výpočetní čas.
554+
555+
```php
556+
$matches = Strings::matchAll($largeText, '~\w+~', lazy: true);
557+
foreach ($matches as $match) {
558+
echo "Nalezeno: $match[0]\n";
559+
// Zpracování může být kdykoli přerušeno
560+
}
561+
```
562+
553563

554564
replace(string $subject, string|array $pattern, string|callable $replacement='', int $limit=-1, bool $captureOffset=false, bool $unmatchedAsNull=false, bool $utf8=false): string .[method]
555565
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)