nick-lai/associative-array
Composer 安装命令:
composer require nick-lai/associative-array
包简介
A lightweight associative array library for PHP.
README 文档
README
A lightweight associative array library for PHP.
Table of Contents
Requirements
AssociativeArray requires PHP >= 7.0.0
Installation
composer require nick-lai/associative-array
Basic Usage
use NickLai\AssociativeArray; $data = [ ['id' => 1001, 'category' => 'C', 'price' => 20], ['id' => 1002, 'category' => 'B', 'price' => 15], ['id' => 1003, 'category' => 'A', 'price' => 15], ['id' => 1004, 'category' => 'A', 'price' => 25], ['id' => 1005, 'category' => 'B', 'price' => 10], ]; $associativeArray = new AssociativeArray($data); var_export([ 'first' => $associativeArray->first(), 'last' => $associativeArray->last(), 'count' => $associativeArray->count(), 'sum(price)' => $associativeArray->sum('price'), 'avg(price)' => $associativeArray->avg('price'), ]);
Result:
array (
'first' =>
array (
'id' => 1001,
'category' => 'C',
'price' => 20,
),
'last' =>
array (
'id' => 1005,
'category' => 'B',
'price' => 10,
),
'count' => 5,
'sum(price)' => 85,
'avg(price)' => 17,
)
select()
Get rows of selected columns.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 30], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->select(['id', 'price'])->toArray()); var_export($associativeArray->select(['category', 'price'])->toArray());
Result:
array (
0 =>
array (
'id' => 1001,
'price' => 30,
),
1 =>
array (
'id' => 1002,
'price' => 25,
),
2 =>
array (
'id' => 1003,
'price' => 10,
),
)
array (
0 =>
array (
'category' => 'C',
'price' => 30,
),
1 =>
array (
'category' => 'A',
'price' => 25,
),
2 =>
array (
'category' => 'B',
'price' => 10,
),
)
where()
Filter the rows using the given callback.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 30], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); $result = $associativeArray->where(function ($row) { return $row['price'] > 10; })->toArray(); var_export($result);
Result:
array (
0 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 30,
),
1 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
),
)
innerJoin()
Inner join rows
$associativeArray = new AssociativeArray([ 1001 => ['id' => 1001, 'category' => 'C', 'price' => 30], 1002 => ['id' => 1002, 'category' => 'A', 'price' => 25], 1003 => ['id' => 1003, 'category' => 'B', 'price' => 10], 1004 => ['id' => 1004, 'category' => 'X', 'price' => 60], ]); $categories = [ 'A' => ['category' => 'A', 'desc' => 'A desc'], 'B' => ['category' => 'B', 'desc' => 'B desc'], 'C' => ['category' => 'C', 'desc' => 'C desc'], 'D' => ['category' => 'D', 'desc' => 'D desc'], ]; $result = $associativeArray->innerJoin($categories, function ($leftRow, $rightRow) { return $leftRow['category'] === $rightRow['category']; })->toArray(); var_export($result);
Result:
array (
1001 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 30,
'desc' => 'C desc',
),
1002 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
'desc' => 'A desc',
),
1003 =>
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
'desc' => 'B desc',
),
)
leftJoin()
Left join rows
$associativeArray = new AssociativeArray([ 1001 => ['id' => 1001, 'category' => 'C', 'price' => 30], 1002 => ['id' => 1002, 'category' => 'A', 'price' => 25], 1003 => ['id' => 1003, 'category' => 'B', 'price' => 10], 1004 => ['id' => 1004, 'category' => 'X', 'price' => 60], ]); $categories = [ 'A' => ['category' => 'A', 'desc' => 'A desc'], 'B' => ['category' => 'B', 'desc' => 'B desc'], 'C' => ['category' => 'C', 'desc' => 'C desc'], 'D' => ['category' => 'D', 'desc' => 'D desc'], ]; $result = $associativeArray->leftJoin($categories, function ($leftRow, $rightRow) { return $leftRow['category'] === $rightRow['category']; })->toArray(); var_export($result);
Result:
array (
1001 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 30,
'desc' => 'C desc',
),
1002 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
'desc' => 'A desc',
),
1003 =>
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
'desc' => 'B desc',
),
1004 =>
array (
'id' => 1004,
'category' => 'X',
'price' => 60,
'desc' => NULL,
),
)
rightJoin()
Right join rows
$associativeArray = new AssociativeArray([ 1001 => ['id' => 1001, 'category' => 'C', 'price' => 30], 1002 => ['id' => 1002, 'category' => 'A', 'price' => 25], 1003 => ['id' => 1003, 'category' => 'B', 'price' => 10], 1004 => ['id' => 1004, 'category' => 'X', 'price' => 60], ]); $categories = [ 'A' => ['category' => 'A', 'desc' => 'A desc'], 'B' => ['category' => 'B', 'desc' => 'B desc'], 'C' => ['category' => 'C', 'desc' => 'C desc'], 'D' => ['category' => 'D', 'desc' => 'D desc'], ]; $result = $associativeArray->rightJoin($categories, function ($leftRow, $rightRow) { return $leftRow['category'] === $rightRow['category']; })->toArray(); var_export($result);
Result:
array (
'A' =>
array (
'category' => 'A',
'desc' => 'A desc',
'id' => 1002,
'price' => 25,
),
'B' =>
array (
'category' => 'B',
'desc' => 'B desc',
'id' => 1003,
'price' => 10,
),
'C' =>
array (
'category' => 'C',
'desc' => 'C desc',
'id' => 1001,
'price' => 30,
),
'D' =>
array (
'category' => 'D',
'desc' => 'D desc',
'id' => NULL,
'price' => NULL,
),
)
orderBy()
Order by keys
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); $result = $associativeArray->orderBy(['price', 'category'], ['desc', 'asc'])->toArray(); var_export($result);
Result:
array (
0 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
),
1 =>
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
),
2 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
),
)
Keep index
$associativeArray = new AssociativeArray([ 'X' => ['id' => 1001, 'category' => 'C', 'price' => 10], 'Y' => ['id' => 1002, 'category' => 'A', 'price' => 25], 'Z' => ['id' => 1003, 'category' => 'B', 'price' => 10], ]); $result = $associativeArray->orderBy('category', 'asc', true)->toArray(); var_export($result);
Result:
array ( 'Y' => array ( 'id' => 1002, 'category' => 'A', 'price' => 25, ), 'Z' => array ( 'id' => 1003, 'category' => 'B', 'price' => 10, ), 'X' => array ( 'id' => 1001, 'category' => 'C', 'price' => 10, ), )
groupBy()
Groups an associative array by keys.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'B', 'price' => 30], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 30], ['id' => 1004, 'category' => 'A', 'price' => 30], ]); $result = $associativeArray->groupBy(['category', 'price']); var_export($result);
Result:
array (
'B' =>
array (
30 =>
array (
0 =>
array (
'id' => 1001,
'category' => 'B',
'price' => 30,
),
1 =>
array (
'id' => 1003,
'category' => 'B',
'price' => 30,
),
),
),
'A' =>
array (
25 =>
array (
0 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
),
),
30 =>
array (
0 =>
array (
'id' => 1004,
'category' => 'A',
'price' => 30,
),
),
),
)
make()
Create a new associative array instance.
$data = [ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]; var_export(AssociativeArray::make($data)->first());
Result:
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
first()
Return the first row
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->first());
Result:
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
last()
Return the last row
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->last());
Result:
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
)
count()
Count the number of rows in the associative array.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->count());
Result:
3
sum()
Get the sum of a given key.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->sum('price'));
Result:
45
avg()
Get the average value of a given key.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->avg('price'));
Result:
15
toArray()
Get the instance as an array.
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray->toArray());
Result:
array (
0 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
),
1 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
),
2 =>
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
),
)
Array Access
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); var_export($associativeArray[0]);
Result:
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
Traversable
$associativeArray = new AssociativeArray([ ['id' => 1001, 'category' => 'C', 'price' => 10], ['id' => 1002, 'category' => 'A', 'price' => 25], ['id' => 1003, 'category' => 'B', 'price' => 10], ]); foreach ($associativeArray as $row) { echo $row['category'] . PHP_EOL; }
Result:
C
A
B
License
AssociativeArray is released under the MIT Licence. See the bundled LICENSE file for details.
nick-lai/associative-array 适用场景与选型建议
nick-lai/associative-array 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 41 次下载、GitHub Stars 达 4, 最近一次更新时间为 2019 年 06 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「array」 「associative array」 「Associative」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 nick-lai/associative-array 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 nick-lai/associative-array 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 nick-lai/associative-array 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Pack of advanced array functions specifically tailored for: associative (assoc) array, multidimensional array, array of objects and handling nested array elements
A set of useful PHP classes.
Functions for creating and transforming associative arrays with preserved keys
Enum Helper with switch-case alternative and more
Trait providing methods to set class properties with an array.
Traits to build collections of specific objects
统计信息
- 总下载量: 41
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 6
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-06-28