PHPackages                             cocoon-projet/collection - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. cocoon-projet/collection

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

cocoon-projet/collection
========================

0.0.4(1y ago)043MITPHPPHP ^8.0CI passing

Since Oct 30Pushed 1y ago1 watchersCompare

[ Source](https://github.com/cocoon-projet/collection)[ Packagist](https://packagist.org/packages/cocoon-projet/collection)[ Docs](https://github.com/cocoon-projet/collection/blob/master/docs/README.md)[ RSS](/packages/cocoon-projet-collection/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependencies (4)Versions (5)Used By (0)

[![PHP Composer](https://github.com/cocoon-projet/collection/actions/workflows/ci.yml/badge.svg)](https://github.com/cocoon-projet/collection/actions/workflows/ci.yml) [![codecov](https://camo.githubusercontent.com/0b30e4cad80d149ba5338257fd1517a48ba8653e5a1961887586fcf5377b0609/68747470733a2f2f636f6465636f762e696f2f67682f636f636f6f6e2d70726f6a65742f636f6c6c656374696f6e2f67726170682f62616467652e7376673f746f6b656e3d305237485737414d5837)](https://codecov.io/gh/cocoon-projet/collection) [![License](https://camo.githubusercontent.com/bbd05f341c8cc2fef766a381c121830e990070db1c11179202f86be4fbfae318/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e63652d4d49542d677265656e)](https://camo.githubusercontent.com/bbd05f341c8cc2fef766a381c121830e990070db1c11179202f86be4fbfae318/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e63652d4d49542d677265656e)

Cocoon Collection
=================

[](#cocoon-collection)

Une bibliothèque PHP moderne pour manipuler des collections de données avec une interface fluide.

🚀 Installation
--------------

[](#-installation)

```
composer require cocoon-projet/collection
```

📋 Prérequis
-----------

[](#-prérequis)

- PHP 8.0 ou supérieur
- Composer

🎯 Caractéristiques
------------------

[](#-caractéristiques)

- Interface fluide pour la manipulation de tableaux
- Support complet du typage PHP 8
- Méthodes de filtrage style SQL (where, whereIn, etc.)
- Fonctions d'agrégation (sum, avg, etc.)
- Manipulation de collections (map, filter, etc.)
- Compatible avec les interfaces PHP standards (Countable, ArrayAccess, IteratorAggregate)

📖 Documentation
---------------

[](#-documentation)

### Création d'une collection

[](#création-dune-collection)

```
use Cocoon\Collection\Collection;

// Collection vide
$collection = new Collection();

// Collection avec des données initiales
$collection = new Collection(['un', 'deux', 'trois']);

// Collection d'objets ou tableaux associatifs
$collection = new Collection([
    ['id' => 1, 'nom' => 'Alice'],
    ['id' => 2, 'nom' => 'Bob']
]);
```

### Méthodes de Base

[](#méthodes-de-base)

#### Accès aux éléments

[](#accès-aux-éléments)

```
// Obtenir tous les éléments
$tous = $collection->all();

// Obtenir le premier élément
$premier = $collection->first();

// Obtenir le dernier élément
$dernier = $collection->last();

// Obtenir un élément spécifique
$element = $collection->get('cle', 'valeur_par_defaut');
```

#### Manipulation

[](#manipulation)

```
// Ajouter un élément
$collection->set('cle', 'valeur');

// Vérifier l'existence d'un élément
$existe = $collection->exists('valeur');

// Supprimer le premier élément
$premier = $collection->shift();

// Obtenir une portion de la collection
$portion = $collection->slice(0, 2);

// Prendre N éléments
$elements = $collection->take(3);  // 3 premiers éléments
$elements = $collection->take(-2); // 2 derniers éléments
```

### Filtrage et Recherche

[](#filtrage-et-recherche)

```
// Filtrage simple
$filtree = $collection->where('age', '>', 25);

// Filtrage avec IN
$filtree = $collection->whereIn('id', [1, 2, 3]);

// Filtrage avec BETWEEN
$filtree = $collection->whereBetween('age', [25, 35]);

// Filtrage avec NOT IN
$filtree = $collection->whereNotIn('id', [4, 5, 6]);

// Filtrage avec NOT BETWEEN
$filtree = $collection->whereNotBetween('age', [40, 50]);
```

### Tri et Groupement

[](#tri-et-groupement)

```
// Tri simple
$triee = $collection->sort('asc');  // ou 'desc'

// Tri par clé
$triee = $collection->orderBy('age', 'desc');

// Groupement
$groupee = $collection->groupBy('categorie');
```

### Transformation

[](#transformation)

```
// Mapper les éléments
$mappee = $collection->map(fn($item) => strtoupper($item));

// Filtrer les éléments
$filtree = $collection->filter(fn($item) => $item > 10);

// Extraire une colonne
$noms = $collection->pluck('nom');

// Extraire une colonne avec index personnalisé
$noms = $collection->pluck('nom', 'id');

// Diviser en morceaux
$morceaux = $collection->chunk(2);
```

### Agrégation

[](#agrégation)

```
// Compter les éléments
$total = $collection->count();

// Calculer une somme
$somme = $collection->sum();
$somme = $collection->sum('prix');

// Calculer la somme d'un tableau de valeurs
$sommeNotes = $collection->sumKey([10, 15, 20]); // Retourne 45

// Calculer une moyenne
$moyenne = $collection->avg();
$moyenne = $collection->avg('age');

// Calculer la moyenne d'un tableau de valeurs
$moyenneNotes = $collection->avgKey([10, 15, 20]); // Retourne 15

// Joindre les éléments
$chaine = $collection->implode(', ');
$chaine = $collection->implode(', ', 'nom');
```

### Vérifications

[](#vérifications)

```
// Vérifier si vide
$estVide = $collection->isEmpty();

// Vérifier si non vide
$nonVide = $collection->isNotEmpty();

// Vérifier l'existence d'une valeur
$existe = $collection->exists('valeur');
$existe = $collection->exists(fn($item) => $item->age > 25);
```

### Sélection de Clés

[](#sélection-de-clés)

```
// Sélectionner certaines clés
$selection = $collection->only('id', 'nom');

// Exclure certaines clés
$exclusion = $collection->except('password', 'token');

// Obtenir toutes les clés
$cles = $collection->keys();
```

🔄 Conversion
------------

[](#-conversion)

```
// Convertir en tableau
$tableau = $collection->toArray();

// Convertir en chaîne
$chaine = $collection->implode(', ');
```

🤝 Contribution
--------------

[](#-contribution)

Les contributions sont les bienvenues ! N'hésitez pas à :

1. Fork le projet
2. Créer une branche pour votre fonctionnalité
3. Commiter vos changements
4. Pousser vers la branche
5. Ouvrir une Pull Request

📝 Licence
---------

[](#-licence)

Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails.

🔍 Exemples Complets
-------------------

[](#-exemples-complets)

### Exemple 1 : Gestion d'une liste de produits

[](#exemple-1--gestion-dune-liste-de-produits)

```
$produits = new Collection([
    ['id' => 1, 'nom' => 'Laptop', 'prix' => 1200, 'stock' => 5],
    ['id' => 2, 'nom' => 'Smartphone', 'prix' => 800, 'stock' => 10],
    ['id' => 3, 'nom' => 'Tablette', 'prix' => 400, 'stock' => 3]
]);

// Produits en stock avec prix > 500€
$produitsDisponibles = $produits
    ->where('stock', '>', 0)
    ->where('prix', '>', 500)
    ->orderBy('prix', 'desc');

// Calculer la valeur totale du stock
$valeurStock = $produits
    ->map(fn($item) => $item['prix'] * $item['stock'])
    ->sum();

// Liste des noms de produits
$noms = $produits->pluck('nom')->implode(', ');
```

### Exemple 2 : Traitement de données utilisateurs

[](#exemple-2--traitement-de-données-utilisateurs)

```
$utilisateurs = new Collection([
    ['id' => 1, 'nom' => 'Alice', 'age' => 25, 'role' => 'admin'],
    ['id' => 2, 'nom' => 'Bob', 'age' => 30, 'role' => 'user'],
    ['id' => 3, 'nom' => 'Charlie', 'age' => 35, 'role' => 'user']
]);

// Grouper par rôle
$parRole = $utilisateurs->groupBy('role');

// Moyenne d'âge
$moyenneAge = $utilisateurs->avg('age');

// Utilisateurs de 25 à 32 ans
$trancheAge = $utilisateurs->whereBetween('age', [25, 32]);

// Extraire emails et noms
$contacts = $utilisateurs->pluck('email', 'nom');
```

### Nouvelles Fonctionnalités de Filtrage

[](#nouvelles-fonctionnalités-de-filtrage)

```
// Filtrer les éléments NULL
$sansStock = $collection->whereNull('stock');

// Filtrer les éléments non NULL
$enStock = $collection->whereNotNull('stock');

// Filtrer avec LIKE (style SQL)
$recherche = $collection->whereLike('nom', '%Dell%');     // Contient 'Dell'
$recherche = $collection->whereLike('nom', 'Dell%');      // Commence par 'Dell'
$recherche = $collection->whereLike('nom', '%Dell');      // Termine par 'Dell'
```

### Jointures

[](#jointures)

```
// Jointure interne (INNER JOIN)
$resultat = $produits->join($ventes, 'id', 'produit_id', 'inner');

// Jointure gauche (LEFT JOIN)
$resultat = $produits->join($ventes, 'id', 'produit_id', 'left');

// Jointure droite (RIGHT JOIN)
$resultat = $produits->join($ventes, 'id', 'produit_id', 'right');
```

### Statistiques et Agrégation

[](#statistiques-et-agrégation)

```
// Compter les occurrences par valeur
$parCategorie = $collection->countBy('categorie');

// Statistiques complètes
$stats = $collection->stats('prix');
// Retourne : [
//     'min' => valeur minimale,
//     'max' => valeur maximale,
//     'avg' => moyenne,
//     'sum' => somme,
//     'count' => nombre d'éléments
// ]
```

### Groupement Avancé

[](#groupement-avancé)

```
// Groupement multi-niveaux
$groupes = $collection->groupByMultiple('categorie', 'marque', 'annee');

// Groupement par intervalles
$parPrix = $collection->groupByRange('prix', 500); // Groupes de 500€
```

### Exemple Complet

[](#exemple-complet)

```
$produits = new Collection([
    ['id' => 1, 'nom' => 'Laptop Dell', 'prix' => 1200, 'categorie' => 'Informatique'],
    ['id' => 2, 'nom' => 'iPhone 13', 'prix' => 999, 'categorie' => 'Téléphonie'],
    // ...
]);

// Analyse complexe
$analyse = $produits
    ->whereNotNull('stock')                    // Uniquement les produits en stock
    ->whereBetween('prix', [300, 1000])       // Prix entre 300€ et 1000€
    ->groupBy('categorie')                     // Grouper par catégorie
    ->map(function ($groupe) {                 // Analyser chaque groupe
        return [
            'count' => $groupe->count(),       // Nombre de produits
            'stats' => $groupe->stats('prix'), // Statistiques des prix
            'total_stock' => $groupe->sum('stock')  // Stock total
        ];
    });
```

### Bonnes Pratiques

[](#bonnes-pratiques)

1. **Performance**

    - Utilisez `whereNotNull()` avant d'autres filtres pour réduire le jeu de données
    - Préférez `groupByMultiple()` à des `groupBy()` imbriqués
    - Utilisez `stats()` plutôt que plusieurs appels individuels aux méthodes d'agrégation
2. **Jointures**

    - Spécifiez le type de jointure approprié pour éviter les résultats inattendus
    - Utilisez 'left' pour préserver les données de la collection principale
    - Vérifiez les clés de jointure avant d'effectuer l'opération
3. **Filtrage**

    - `whereLike()` est sensible à la casse par défaut
    - Les motifs de recherche suivent la syntaxe SQL (`%` pour zéro ou plusieurs caractères)
    - Combinez plusieurs conditions de filtrage pour des recherches précises

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance47

Moderate activity, may be stable

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~170 days

Total

4

Last Release

414d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5b019cffcdf77ab35448666ea712d4263ae3afd4bc0110de6a267936e3dba08d?d=identicon)[cocoon-projet](/maintainers/cocoon-projet)

---

Top Contributors

[![cocoon-projet](https://avatars.githubusercontent.com/u/28481301?v=4)](https://github.com/cocoon-projet "cocoon-projet (29 commits)")

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/cocoon-projet-collection/health.svg)

```
[![Health](https://phpackages.com/badges/cocoon-projet-collection/health.svg)](https://phpackages.com/packages/cocoon-projet-collection)
```

###  Alternatives

[robinherbots/jquery.inputmask

Inputmask is a javascript library which creates an input mask. Inputmask can run against vanilla javascript, jQuery and jqlite.

6.5k276.6k4](/packages/robinherbots-jqueryinputmask)[webman/captcha

Captcha generator

1484.2k25](/packages/webman-captcha)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
