mistralys/column-widths-calculator

PHP列宽度计算工具。

2.0.0 2022-06-09 14:09 UTC

This package is auto-updated.

Last update: 2024-09-09 18:59:05 UTC


README

Build Status Scrutinizer Code Quality

列宽度计算器

这是一个小型工具,可用于将任意数值转换为列宽度。给定一列名称和值的列表,它将智能地将值转换为百分比,并为空列填充有意义的值。

特性

  • 用有意义的值填充空值
  • 使用比例计算将任何值转换为百分比
  • 确保总宽度始终精确匹配100%

安装

使用composer,只需require该包。

通过命令行

composer require mistralys/column-widths-calculator

通过composer.json

"require" : 
{
    "mistralys/column-widths-calculator": "^1.0"
}

使用方法

使用工厂方法实例化计算器

$columns = array(
    'Col1' => 20,
    'Col2' => 0,
    'Col3' => 40
);

$calc =  Calculator::create($columns);

$converted = $calc->getValues();

这将返回一个具有相同键的数组,并填充缺失的列值

array(
    'Col1' => 20,
    'Col2' => 40,
    'Col3' => 40
);

整数和浮点数之间的切换

默认情况下,计算器将生成整数值,即使所有内部计算都是基于浮点数以保持精度。这可以被关闭以检索浮点值

$calc = Calculator::create($columns);
$calc->setFloatValues();

在这种情况下,根本不会进行四舍五入 - 您将必须手动处理任何希望应用的四舍五入。

处理最小宽度

当留下列以自动填充时,可能不足以填充列的宽度。考虑以下列配置

Col1 = 80
Col2 = 20
Col3 = 0

默认情况下,计算器将保证每个列至少有宽度1。因此,列表将调整如下,以便第三列可以具有宽度

Col1 = 79
Col2 = 20
Col3 = 1

多余的部分将按照比例从所有非空列中减去(不会低于最小宽度)。

设置最小大小

最小大小可以设置如下

$calc = Calculator::create($columns);
$calc->setMinWidth(20);

这将确保所有列至少有20%的大小。

示例

Col1 = 80
Col2 = 20
Col3 = 0

将给出以下结果

Col1 = 60
Col2 = 20
Col3 = 20

注意:最小大小的最大可能值取决于列的数量。例如,尝试将最小大小设置为3列的40%,将抛出异常(40 x 3大于100)。

任意编号

计算器可以与任何数制一起使用,并按比例转换值。

考虑以下值

Col1 = 1400
Col2 = 900
Col3 = 700

这将转换为以下值

Col1 = 38
Col2 = 33
Col3 = 30

= 100%

缺失值

只要有一个以上的列有值,缺失的值将根据现有值的平均值填充,以获得真实的结果。

例如,值

Col1 = 1400
Col2 = 900
Col3 = 0
Col4 = 0 

将转换为以下

Col1 = 30
Col2 = 19
Col3 = 25
Col4 = 26

= 100%

更改目标值

默认情况下,计算器假定您想要使用百分比,并将目标值锁定为100。但是,可以调整此值

$calc = Calculator::create($columns);
$calc->setMaxTotal(1000);

在上面的示例中,列宽度将计算为达到总数1000,而不是默认的100。

转换为绝对像素值

为了方便起见,getPixelValues()方法可以将列百分比转换为绝对像素值,给定最大目标宽度。

以下示例将列宽度转换为达到宽度600px

$cols = array(
    'Col1' => 40,
    'Col2' => 40,
    'Col3' => 20
);

$calc = Calculator::create($columns);

$pixelWidths = $calc->getPixelValues(600);

结果宽度将是

Col1 = 207
Col2 = 207
Col3 = 186

= 600