PHPackages                             heliomarpm/linq-php - 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. heliomarpm/linq-php

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

heliomarpm/linq-php
===================

Uma biblioteca leve, de alta performance e sem dependências externas para manipulação de coleções de dados (arrays) em PHP, inspirada na sintaxe do LINQ (Language Integrated Query)

v1.0.0(1mo ago)00MITPHPPHP &gt;=8.1CI passing

Since Jul 13Pushed 1mo agoCompare

[ Source](https://github.com/heliomarpm/linq-php)[ Packagist](https://packagist.org/packages/heliomarpm/linq-php)[ Fund](https://bit.ly/paypal-br-sponsor-heliomar)[ Fund](https://bit.ly/paypal-heliomarpm)[ RSS](/packages/heliomarpm-linq-php/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

 [![LinqPHP](./logo.png)](./logo.png)
=====================================

[![](https://camo.githubusercontent.com/c98e5c34f64dae471026cc543a56d2a424f293e7e654e2f5642ff0f52b1f2621/68747470733a2f2f6e6176746f2e6d652f6173736574732f6e61766967617465746f6d652d6272616e642e706e67)](https://navto.me/heliomarpm)[![CI Status](https://github.com/heliomarpm/linq-php/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/heliomarpm/linq-php/actions/workflows/ci.yml/badge.svg?branch=main)[![CodeFactor](https://camo.githubusercontent.com/c1a48cb5023c97530b6fad749adb6a4bc30e5a614f09c35918d424f653c9229b/68747470733a2f2f7777772e636f6465666163746f722e696f2f7265706f7369746f72792f6769746875622f68656c696f6d6172706d2f6c696e712d7068702f6261646765)](https://www.codefactor.io/repository/github/heliomarpm/linq-php)[![Packagist Version](https://camo.githubusercontent.com/9f9f09b7e0052d2cfeae58b6d5e95707659c49fd9b7cd104f3c065d23503ef31/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f68656c696f6d6172706d2f6c696e712d706870)](https://packagist.org/packages/heliomarpm/linq-php)[![Packagist Downloads](https://camo.githubusercontent.com/07bc3045bb8026c2cc77112ed8d72c69efea285751fbbdda54bb6d759a5267ae/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f68656c696f6d6172706d2f6c696e712d706870)](https://packagist.org/packages/heliomarpm/linq-php)

[](#--)

[![GitHub Sponsors](https://camo.githubusercontent.com/88acf845c99d65681a68827d4c1291b1d0a4a45f07dd36a00eaa4611e87b255e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622532302d53706f6e736f722d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d646236316132)](https://github.com/sponsors/heliomarpm)[![PayPal](https://camo.githubusercontent.com/d8b1d565167f1a51f3f5af31e817b56e94e20b70f38349d07f5f6bbeaec2192c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652532306f6e2d70617970616c2d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d303437356665)](https://bit.ly/paypal-sponsor-heliomarpm)[![Ko-fi](https://camo.githubusercontent.com/6769036184ab5515f7361308162bb87871055d33c5253877f8aab3ab638e9bb6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6b6f66692d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d666635663566)](https://ko-fi.com/heliomarpm)[![Liberapay](https://camo.githubusercontent.com/9664bd91c53a67c8290abcc5cf671f592b8d27a74b7cc6aa461cf1904e2e7978/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c69626572617061792d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d663663393135)](https://liberapay.com/heliomarpm)

LinqPHP
=======

[](#linqphp)

Uma biblioteca leve, de alta performance e sem dependências externas para manipulação de coleções de dados (`arrays`) em PHP, inspirada na sintaxe do LINQ (Language Integrated Query).

O LinqPHP permite filtrar, agrupar, ordenar e unir arrays multidimensionais de forma fluida e elegante, sendo ideal para processamento de relatórios, formatação de dados para APIs e refatoração de sistemas legados.

> Benchmark v1.0

[![Benchmark](./bench-20260713.png)](./bench-20260713.png)

Requisitos
----------

[](#requisitos)

- PHP 8.1 ou superior.

Instalação
----------

[](#instalação)

Você pode instalar o pacote via Composer:

```
composer require heliomarpm/linq-php
```

Como usar
---------

[](#como-usar)

A classe LinqPHP utiliza uma interface fluida (method chaining). Todas as operações retornam a própria instância (exceto os métodos de saída `toArray` e `toObject`), permitindo encadear múltiplas transformações.

### Inicialização

[](#inicialização)

```
require 'vendor/autoload.php';

use HeliomarPM\LinqPHP\LinqPHP;

$data = [
  ['id' => 1, 'name' => 'John', 'age' => 25, 'status' => 'active', 'city' => 'London'],
  ['id' => 2, 'name' => 'Jane', 'age' => 30, 'status' => 'pending', 'city' => 'New York'],
  ['id' => 3, 'name' => 'John', 'age' => 35, 'status' => 'inactive', 'city' => 'Paris'],
];

$linq = LinqPHP::from($data);
```

### `where()` - Filtragem de Dados

[](#where---filtragem-de-dados)

Aceita arrays de condições simples ou funções (closures) para filtros complexos.

```
// Filtro simples
$result = LinqPHP::from($data)
    ->where(['age', '>', 25])
    ->toArray();

// Múltiplos filtros e operadores (startswith, endswith, contains, in)
$result = LinqPHP::from($data)
    ->where([
        ['age', '>=', 25],
        ['status', 'in', ['active', 'pending']],
        ['name', 'startswith', 'J']
    ])
    ->toArray();

// Usando Closures (funções anônimas)
$result = LinqPHP::from($data)
    ->where(fn($item) => $item['id'] % 2 !== 0)
    ->toArray();
```

### `select()` e `distinct()` - Projeção de Dados

[](#select-e-distinct---projeção-de-dados)

Selecione apenas as colunas desejadas. Use `strict: true` para garantir que os dados existam.

```
// Seleciona colunas específicas
$result = LinqPHP::from($data)
    ->select(['name', 'status'])
    ->toArray();

// Retorna apenas os registros únicos
$result = LinqPHP::from($data)
    ->select(['name'])
    ->distinct()
    ->toArray();
```

### `join()` - União Relacional

[](#join---união-relacional)

Faça joins entre arrays como se estivesse em um banco de dados.

```
$users = [
    ['id' => 1, 'name' => 'John', 'course_id' => 10],
    ['id' => 2, 'name' => 'Jane', 'course_id' => 20],
];

$courses = [
    ['id_course' => 10, 'course_name' => 'PHP 8'],
    ['id_course' => 20, 'course_name' => 'Clean Code'],
];

$result = LinqPHP::from($users)
    ->join($courses, JoinType::INNER, ['course_id' => 'id_course'])
    ->toArray();
```

### `groupBy()` - Agrupamento e Agregação

[](#groupby---agrupamento-e-agregação)

Agrupe dados e realize cálculos automáticos (sum, max, min, count, avg).

```
$vendas = [
    ['vendedor' => 'João', 'valor' => 100],
    ['vendedor' => 'Maria', 'valor' => 200],
    ['vendedor' => 'João', 'valor' => 150],
];

// Agrupa por vendedor e soma os valores
$result = LinqPHP::from($vendas)
    ->groupBy(['vendedor'], ['sum' => ['valor']])
    ->toArray();
```

### `orderBy()` e `orderByKey()` - Ordenação

[](#orderby-e-orderbykey---ordenação)

```
// Ordena por uma chave simples
$result = LinqPHP::from($data)
    ->orderByKey('age', 'desc')
    ->toArray();

// Ordenação múltipla
$result = LinqPHP::from($data)
    ->orderBy(['name' => 'asc', 'age' => 'desc'])
    ->toArray();
```

### Extração de Resultados (`toArray` e `toObject`)

[](#extração-de-resultados-toarray-e-toobject)

No final da cadeia de métodos, você deve chamar um método de saída para recuperar seus dados modificados.

```
$linq = LinqPHP::from($data)->where(['age', '>', 20]);

// Retorna um array tradicional
$array =$linq->toArray();

// Retorna um stdClass contendo metadados de performance
$obj =$linq->toObject();
echo $obj->count; // Quantidade de registros
echo $obj->elapsedTime; // Tempo de execução
echo $obj->memoryUsed; // Memória gasta
print_r($obj->rows); // Os dados em si
```

Desenvolvimento e Testes
------------------------

[](#desenvolvimento-e-testes)

Este pacote foi desenhado para ser leve. O código-fonte principal encontra-se na pasta `src/`. Testes unitários e benchmarks não são exportados na instalação via Composer para economizar espaço e banda.

Para rodar os testes localmente (após clonar o repositório):

```
composer install
composer test
```

Note

O comando `composer du -o`, significa `composer dump-autoload -o`, que é uma opção para atualizar o autoload do Composer sem precisar de reiniciar o servidor web. Isso é útil quando você está trabalhando com muitos arquivos e você não quer reiniciar o servidor web a cada mudança. Isso também pode ajudar a evitar problemas com o autoload, especialmente em ambientes de desenvolvimento.

---

🤝 Contribuição
--------------

[](#-contribuição)

Aceitamos contribuições de bom grado! Seja relatando um bug, sugerindo uma nova funcionalidade, melhorando a documentação ou enviando um *pull request*, sua ajuda é muito apreciada.

Por favor, certifique-se de ler o seguinte antes de enviar um *pull request*:

- [Código de Conduta](.github/CODE_OF_CONDUCT.md)
- [Guia de Contribuição](.github/CONTRIBUTING.md)

Agradecemos a todas as pessoas que já contribuíram para o projeto!

[ ![](https://camo.githubusercontent.com/80e02f379adb89a7abfeb2516774bc7073ac8b2c0c14f84c7fc08ff99b087416/68747470733a2f2f636f6e747269622e6e6e2e63692f6170693f7265706f3d68656c696f6d6172706d2f6c696e712d706870266e6f5f626f743d74727565)](https://github.com/heliomarpm/linq-php/graphs/contributors)###### Made with [contrib.nn](https://contrib.nn.ci/?repo=heliomarpm/linq-php&no_bot=true).

[](#made-with-contribnn)

Dito isso, existem várias maneiras de contribuir para este projeto, como:

⭐ Dando uma estrela (*star*) ao repositório
🐞 Relatando bugs
💡 Sugerindo funcionalidades
🧾 Melhorando a documentação
📢 Compartilhando este projeto e recomendando-o aos seus amigos

💵 Apoie o Projeto
-----------------

[](#-apoie-o-projeto)

Se você gosta do projeto, considere fazer uma doação ao desenvolvedor via GitHub Sponsors, Ko-fi, PayPal ou Liberapay — a escolha é sua. 😉

[![GitHub Sponsors](https://camo.githubusercontent.com/88acf845c99d65681a68827d4c1291b1d0a4a45f07dd36a00eaa4611e87b255e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4769744875622532302d53706f6e736f722d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d646236316132)](https://github.com/sponsors/heliomarpm)[![PayPal](https://camo.githubusercontent.com/d8b1d565167f1a51f3f5af31e817b56e94e20b70f38349d07f5f6bbeaec2192c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f6e6174652532306f6e2d70617970616c2d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d303437356665)](https://bit.ly/paypal-sponsor-heliomarpm)[![Ko-fi](https://camo.githubusercontent.com/6769036184ab5515f7361308162bb87871055d33c5253877f8aab3ab638e9bb6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6b6f66692d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d666635663566)](https://ko-fi.com/heliomarpm)[![Liberapay](https://camo.githubusercontent.com/9664bd91c53a67c8290abcc5cf671f592b8d27a74b7cc6aa461cf1904e2e7978/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c69626572617061792d3143314532363f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d31433145323626636f6c6f723d663663393135)](https://liberapay.com/heliomarpm)

📝 Licença
---------

[](#-licença)

Este projeto está sob a licença MIT. Sinta-se livre para usá-lo e modificá-lo.

[MIT © Heliomar P. Marques](https://github.com/heliomarpm/linqphp/blob/main/LICENSE) [🔝](#top)

---

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance91

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

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

Unknown

Total

1

Last Release

48d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/514a5102d3c30267cd946e631a600ae99f29b735a61f1c844bca2d8733b737fd?d=identicon)[heliomarpm](/maintainers/heliomarpm)

---

Top Contributors

[![heliomarpm](https://avatars.githubusercontent.com/u/13087389?v=4)](https://github.com/heliomarpm "heliomarpm (24 commits)")

---

Tags

arrayiteratorcollectionPHP Libraryyieldlinqlinq2objectslinqphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/heliomarpm-linq-php/health.svg)

```
[![Health](https://phpackages.com/badges/heliomarpm-linq-php/health.svg)](https://phpackages.com/packages/heliomarpm-linq-php)
```

###  Alternatives

[athari/yalinqo

YaLinqo, a LINQ-to-objects library for PHP

4581.2M5](/packages/athari-yalinqo)[loophp/collection

A (memory) friendly, easy, lazy and modular collection class.

743837.9k18](/packages/loophp-collection)[aimeos/map

Easy and elegant handling of PHP arrays as array-like collection objects similar to jQuery and Laravel Collections

4.3k491.7k20](/packages/aimeos-map)[ginq/ginq

LINQ to Object inspired DSL for PHP

192260.5k3](/packages/ginq-ginq)[chdemko/sorted-collections

Sorted Collections for PHP &gt;= 8.4

222.9M3](/packages/chdemko-sorted-collections)[yansongda/supports

common components

211.5M33](/packages/yansongda-supports)

PHPackages © 2026

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