nick-lai / 关联数组
PHP的一个轻量级关联数组库。
v2.2.0
2019-12-11 03:16 UTC
Requires
- php: ^7.0
Requires (Dev)
- phpunit/phpunit: ^6
README
PHP的一个轻量级关联数组库。
目录
要求
AssociativeArray 需要 PHP >= 7.0.0
安装
composer require nick-lai/associative-array
基本用法
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'), ]);
结果
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()
获取所选列的行。
$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());
结果
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()
使用给定的回调过滤行。
$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);
结果
array (
0 =>
array (
'id' => 1001,
'category' => 'C',
'price' => 30,
),
1 =>
array (
'id' => 1002,
'category' => 'A',
'price' => 25,
),
)
innerJoin()
内连接行
$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);
结果
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()
左连接行
$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);
结果
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()
右连接行
$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);
结果
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()
按键排序
$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);
结果
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,
),
)
保留索引
$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);
结果
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()
根据键分组关联数组。
$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);
结果
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()
创建一个新的关联数组实例。
$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());
结果
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
first()
返回第一行
$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());
结果
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
last()
返回最后一行
$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());
结果
array (
'id' => 1003,
'category' => 'B',
'price' => 10,
)
count()
计算关联数组中的行数。
$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());
结果
3
sum()
获取给定键的总和。
$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'));
结果
45
avg()
获取给定键的平均值。
$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'));
结果
15
toArray()
将实例作为数组获取。
$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());
结果
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,
),
)
数组访问
$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]);
结果
array (
'id' => 1001,
'category' => 'C',
'price' => 10,
)
可遍历的
$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; }
结果
C
A
B
许可证
AssociativeArray 在 MIT 许可证下发布。有关详细信息,请参阅附带 LICENSE 文件。