aa/array-diff

计算数组差异的组件

dev-master 2019-01-24 17:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:42:15 UTC


README

SensioLabsInsight

ArrayDiff 计算器的工作原理类似于 PHP 函数 array_diff_assoc,但由于使用表达式(值匹配),因此以更好的方式计算数组差异。

  • 使用表达式(值匹配),
  • 提供有关数组差异的扩展信息。

示例

$array1 = ['a' => 8, 'b' => 2, 'c' => 3];
$array2 = ['a' => 6, 'b' => 2, 'd' => 3];

$calc = new Calculator(new SimpleMatcher());
$diff = $calc->calculateDiff($array1, $array2);

print $diff->toString();

输出

missing:
    -
        key_path: c
        expected: 3
unmatched:
    -
        key_path: a
        expected: 8
        actual: 6

因为

  • 键为 'c' 的项在 array2 中缺失(缺失
  • 键为 'a' 的项具有不同的值(不匹配

高级示例

假设我们有两个数组

您可以使用表达式匹配来计算这些数组的差异

$calc = new Calculator(new ExpressionMatcher());
$diff = $calc->calculateDiff($array1, $array2);

print $diff->toString();

它返回

missing: {  }
unmatched:
    -
        key_path: pages
        expected: '<type.datetime>'
        actual: 567

因为

  • array1 的键与 array2 的键匹配,因此没有缺失的项
  • 字符串 'The Lord of the Rings' 与表达式 <type.string> 匹配
  • '25.99 EUR' 与复合表达式 <type.float(2)> <type.string> 匹配
  • 'true' 与表达式 <type.boolean> 匹配
  • isbn 值 '1230260002385' 与表达式 <type.string> 匹配
  • 页数 '567' 不匹配表达式 <type.datetime>

表达式的语法为 <expression-name(param1, param2,...)>