myclabs / array-comparator
数组比较器
1.1.0
2014-08-04 11:36 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-12 14:57:36 UTC
README
数组比较辅助工具。
原则
以下是默认行为
默认情况下,比较数组键。此行为可以自定义。
用法
$comparator = new ArrayComparator(); $comparator->whenEqual(function ($item1, $item2) { // Do your stuff ! }) ->whenDifferent(function ($item1, $item2) { // Do your stuff ! }) ->whenMissingRight(function ($item1) { // Do your stuff ! }) ->whenMissingLeft(function ($item2) { // Do your stuff ! }); $comparator->compare($array1, $array2);
例如,对于 Doctrine 实体的高级示例
$comparator = new ArrayComparator(); // Set that items are considered the same if they have the same id // Array keys are ignored in this example $comparator->setItemIdentityComparator(function ($key1, $key2, $item1, $item2) { return $item1->id === $item2->id; }); // Items have differences if their name differ $comparator->setItemComparator(function ($item1, $item2) { return $item1->name === $item2->name; }); $comparator->whenEqual(function ($item1, $item2) { // Do your stuff ! }) ->whenDifferent(function ($item1, $item2) { // Do your stuff ! }) ->whenMissingRight(function ($item1) { // Do your stuff ! }) ->whenMissingLeft(function ($item2) { // Do your stuff ! }); $comparator->compare($array1, $array2);
注意,您还可以使用任何 PHP 可调用格式代替内联函数,例如
$comparator->whenDifferent(array($this, 'whenDifferent'));
文档
whenEqual- 当在两个数组中都找到两个相等的项时调用
$comparator->whenEqual(function ($item1, $item2) { });
whenDifferent- 当在两个数组中都找到两个不同的项时调用
$comparator->whenDifferent(function ($item1, $item2) { });
whenMissingRight- 当第一数组(左侧数组)中存在一个项,但不在第二个数组(右侧数组)中时调用
$comparator->whenMissingRight(function ($item1) { });
whenMissingLeft- 当第二数组(右侧数组)中存在一个项,但不在第一数组(左侧数组)中时调用
$comparator->whenMissingLeft(function ($item2) { });
setItemIdentityComparator- 覆盖默认的身份比较器,用于确定两个项是否代表同一事物
例如,可以用于比较项的 id。
默认行为使用 === 比较数组键。
$comparator->setItemIdentityComparator(function ($key1, $key2, $item1, $item2) { // return true or false });
setItemComparator- 覆盖默认的项比较器,以确定两个项(代表同一事物)是否存在差异
例如,可以用于比较项的特定属性。函数应返回“相等”,即 true 如果项没有差异(那么什么也不做,因为一切都很好),或者 false 如果它们有差异(那么将调用 whenDifferent)。
默认行为使用 == 比较项。
$comparator->setItemComparator(function ($item1, $item2) { // return true or false });
自定义比较器
使用 setItemIdentityComparator 和 setItemComparator 的替代方法是编写自己的比较器类
class CustomComparator extends ArrayComparator { protected function areSame($key1, $key2, $item1, $item2) { // Your stuff return $item1->id === $item2->id; } protected function areEqual($item1, $item2) { // Your stuff return $item1->name === $item2->name; } }
安装
编辑您的 composer.json 文件以添加依赖项
{
"require": {
"myclabs/array-comparator": "1.0.*"
}
}
ArrayComparator 已与 PHP 5.3 及更高版本进行了测试。
变更日志
- 1.0: 经过测试并在生产中使用后的稳定版本(与 0.3 无变化)
- 0.3: PHP 5.3 兼容性和支持所有 PHP 可调用类型
- 0.2: 允许扩展
ArrayComparator类并编写自定义比较器 - 0.1: 第一个版本
贡献
使用 Composer 安装依赖项
composer install
TODO
- 优化数组遍历
- 改进文档?