gupalo/arrayutils

1.10.0 2024-01-26 18:33 UTC

This package is auto-updated.

Last update: 2024-09-26 20:11:30 UTC


README

安装

composer require gupalo/arrayutils

特性

所有代码都经过测试覆盖。查看测试以更好地了解其工作方式。

所有方法都是静态的。

项目可以是以下之一的可迭代(数组、生成器等):

  • 数组
  • 具有公共属性或获取器(任何 Symfony PropertyAccessor 可以获取)的对象

ArrayAggregator

  • max(items, field):项目中的最大字段值
  • sum(items, field):项目字段值的总和
  • ratio(items, field, field2"按 field 求和"/"按 field2 求和"
  • maxRatio(items, field, field2):最大值,其中 "field 值"/"field2 值"

ArrayComparer

比较是智能的 - 如果比较值是浮点数,则使用精度 = 8 进行四舍五入。

  • compareOne(a1, a2, keys):检查每个 (string)a1[key] === (string)a2[key] 对每个 keys。返回从 a1 到 a2 的“补丁”。null 值表示我们需要取消设置此键。
  • compare(a1, a2, keys) a1 和 a2 预期是数组的数组。返回补丁,说明与 a1 相比 a2 中发生了什么更改 - 包含键的数组
    • created:应该创建哪些项目及其值
    • updated:应该更新哪些项目及其更新字段
    • removed:应该删除哪些项目(ID)
  • compareFlat(a1, a2)compare 类似,但 a1 和 a2 被视为标量,并完全比较,而不是按字段比较

ArrayFactory

  • createKeys(keys, value):创建具有这些键和值的数组
  • createDictionary(a, keyColumn, valueColumn):类似于 array_column(a, valueColumn, keyColumn),但不需要所有项目都具有值(?? null

ArrayKeysHelper

  • index($a, array|string $keys = 'id'):创建索引数组,其中索引可能包含多个字段
  • indexAndGroup($a, array|string $keys = 'id'):创建索引数组,但允许有相同索引的多个项目
  • fill($a, $keys, $defaultValue = null):确保数组中所有键都存在,其他所有键都缺失
  • filter($a, $keys, $createMissingKeys = true):从数组中获取这些键
  • unset($a, $keys):从每个数组项中取消设置这些键

ArrayRandom

  • pick(array $items):从数组中选择随机值
  • pickMultiple(array $items, int $count = 1, bool $preserveKeys = false, mixed $default = []):从数组中选择多个($count)随机值

ArrayTable

  • arrayToKeyValues(array $data):将表(如 TSV;第一个项目是包含键的标题)转换为具有命名键的数组

ArrayUniquer

  • values(array $a):uniq -> values
  • notNullValues(array $a):过滤非空 -> uniq -> values
  • columnValues(array $a, string $column):column -> uniq -> values
  • mergeValues(...$a):merge -> uniq -> values
  • mergeNotNullValues(...$a):merge -> 过滤非空 -> uniq -> values

FloatArrayFactory

  • createPreserveKeys(array $a):确保所有值都是浮点数
  • create(array $a):确保所有值都是浮点数 -> values

IntArrayFactory

  • createPreserveKeys(array $a):确保所有值都是整数
  • create(array $a):确保所有值都是整数 -> values

Balancer

要解决的问题:你有一些项目,需要将它们分配到一些桶中。你可以配置不同的策略来分配你的项目到桶中。桶应该实现BucketInterface,平衡器应该实现BalancerInterface

半随机平衡器

它不是完全随机,你可以设置种子,所以使用相同种子和相同项目的多次运行将产生相同的结果。

公平平衡器

尝试使相同桶中的项目权重计数相同。

示例:A/B 测试,你希望将 90% 的用户发送到“A”页面,10% 发送到“B”页面。你可以使用简单的随机方法,但是当用户数量较少时,你很可能会有 20 个用户都看到页面“A”,或者有 5 个用户访问“B”。那时你将很难解释概率理论。使用这个平衡器,你可以确信前 10 个用户中的 1 个会去“B”页面,而且很可能有 20 个用户中的 2 个会到达那里。