heliomarpm/linq-php 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

heliomarpm/linq-php

Composer 安装命令:

composer require 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)

README 文档

README

LinqPHP

CI Status CodeFactor Packagist Version Packagist Downloads

GitHub Sponsors PayPal Ko-fi Liberapay

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

Requisitos

  • PHP 8.1 ou superior.

Instalação

Você pode instalar o pacote via Composer:

composer require heliomarpm/linq-php

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

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

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

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

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

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

// 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)

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

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

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:

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

Made with contrib.nn.

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

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 PayPal Ko-fi Liberapay

📝 Licença

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

MIT © Heliomar P. Marques 🔝

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固