-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Transform
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
Создание новых коллекций из существующих: map/mapWithKeys/flatMap/pluck,
filter/reject, всё where-семейство, типобезопасные unique/duplicates,
flatten/collapse/pad/reverse/shuffle.
Все трансформации иммутабельны — исходная коллекция не меняется. Замыкания без параметра
ключа автоматически уходят в C-реализации (array_map/array_filter) — арность
определяется рефлексией с кэшем на WeakMap. Выборка поля (pluck) идёт через
array_column с точным fallback для отсутствующих полей.
use CloudCastle\Collection\Collection;
$rows = Collection::make([
['id' => 1, 'age' => 10, 'tag' => null],
['id' => 2, 'age' => 20, 'tag' => 'x'],
]);
$rows->pluck('id'); // [1, 2] — через array_column
$rows->pluck('tag', 'id'); // [1 => null, 2 => 'x']
$rows->where('id', 2); // строгое сравнение
$rows->where('id', '2'); // пусто: '2' ≠ 2
$rows->whereBetween('age', [10, 20]); // границы включительно
$rows->whereNull('tag'); // [['id' => 1, …]]
// Типобезопасный unique: 1, '1' и true — разные значения
Collection::make([1, '1', true])->unique()->count(); // 3
// Строковый callable получает только значение — без ловушки intval
Collection::make(['1', '2'])->map('intval'); // [1, 2] (а не [1, 0], как в аналогах)
Collection::make([1, 'a', 3])->filter('is_int'); // [1, 3] — без ArgumentCountError
// Замыкание с ключом — общий путь
$rows->map(fn ($item, $key) => $key . ':' . $item['id']);-
unique/duplicatesразличают типы через раздельные реестры — без хэш-коллизий и с полной точностью float (0.3≠0.1 + 0.2). -
map('intval')безопасен: у аналогов ключ попадает в параметр базы системы счисления. - Fast-path даёт скорость C-циклов там, где ключ не нужен, — без изменения семантики.
-
pluckпо полю в разы быстрее ручногоmap: C-реализацияarray_column.
- Callback-объекты с
__invoke(mixed $v)(без второго параметра) вfilterидут черезARRAY_FILTER_USE_BOTH— объявляйте второй параметр или используйте замыкание.
- Для выборки поля использовать
pluck('field'), а неmap(fn ($r) => $r['field']). - Встроенные функции передавать строкой:
map('trim'),filter('is_string'). - Фильтровать по полю через where-семейство — читаемее и быстрее ручных замыканий.
-
unique()для «очистки» пользовательского ввода разных типов с ожиданием loose-семантики — здесь1и'1'намеренно различны. - Цепочка
values()->all()[0]вместоfirst().
CloudCastle Collection · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)