ajant/simple-array-library

包含方便数组处理方法的简单库

4.2.1 2016-03-17 13:51 UTC

This package is auto-updated.

Last update: 2024-09-05 08:26:35 UTC


README

Build Status Scrutinizer Code Quality Coverage Status

包含方便数组处理方法的库。这些是在各种项目开发过程中自己需要创建的方法,如果您希望添加任何方法,请告诉我: ajant.github@gmail.com

要求

您需要:PHP版本5.4+

快速入门

使用composer安装最新版本

require "ajant/simple-array-library": ~4.1.0

自动加载库

use SimpleArrayLibrary/SimpleArrayLibrary

然后您就可以开始了。

使用示例

为了获得更多帮助,请查看测试,已测试额外的输入场景。addConfigRow

该方法旨在消除需要解析为PHP数组的配置文件的需求,因为这会带来显著的性能损失。它结合了ini文件的可读性,以及直接在PHP级别定义配置的速度。第一个参数表示配置数组,第二个参数表示新的配置行的嵌套键的数字数组(如果为数组关联数组,将抛出异常)。第三个参数表示正在映射的值。该方法返回添加了新行的配置,或者在相同的键组合已经使用的情况下抛出异常。

SimpleArrayLibrary::addConfigRow(array('foo' => array('baz' => 1)), array('foo', 'bar'), 2); // array('foo' => array('baz' => 1, 'bar' => 2))
$config = array();
$config = SimpleArrayLibrary::addConfigRow($config, array('foo', 'bar'), new stdClass());
$config = SimpleArrayLibrary::addConfigRow($config, array('foo', 'baz'), 1);
$config = SimpleArrayLibrary::addConfigRow($config, array('foo', 3), array(1, 2));
// $config = array('foo' => array('bar' => stdClass(), 'baz' => 1, 3 => array(1, 2)))
$config = SimpleArrayLibrary::addConfigRow($config, array('foo', 3), false); // exception because of repeated  array('foo', 3) path

allElementsEqual

检查数组中的所有元素是否相等,以及它们是否都等于指定的值(可选)。

SimpleArrayLibrary::allElementsEqual(array(1, 1)); // true
SimpleArrayLibrary::allElementsEqual(array(1, 2)); // false
SimpleArrayLibrary::allElementsEqual(array(1, 1), 1); // true
SimpleArrayLibrary::allElementsEqual(array(1, 1), 2); // false

castColumns

尝试将二维数组中所有行的指定列转换为指定的类型。允许的类型由常量表示:TYPE_INT,TYPE_STRING,TYPE_FLOAT,TYPE_BOOL,TYPE_ARRAY,TYPE_OBJECT。任何其他类型都会抛出异常。用户应该了解PHP中的类型转换如何工作,因为此方法不提供对可能的转换错误的保护。

第三个参数必须是布尔值,否则会抛出异常。如果第三个参数设置为true,则必须在第二个参数中定义键的列存在,否则会抛出异常。

SimpleArrayLibrary::castColumns(array(array('a' => '2')), array('a' => SimpleArrayLibrary::TYPE_INT)); // array(array('a' => 2))
SimpleArrayLibrary::castColumns(array(array()), array('a' => SimpleArrayLibrary::TYPE_INT), false); // array(array())
SimpleArrayLibrary::castColumns(array(array('a' => '1'), array('b' => 'foo')), array('a' => SimpleArrayLibrary::TYPE_INT), false); // array(array('a' => 1), array('b' => 'foo'))

countMaxDepth

递归地计算数组的最大深度(嵌套子数组的数量)。库中包含非递归方法执行相同的功能。递归方法更快,但在非常深的数组的情况下可能会引起内存使用问题。

SimpleArrayLibrary::countMaxDepth(array()); // 1
SimpleArrayLibrary::countMaxDepth(array(1, array())); // 2
SimpleArrayLibrary::countMaxDepth(array(array('foo'))); // 2

countMaxDepthIterative

计算数组的最大深度(嵌套子数组的数量)。库中包含递归方法执行相同的功能。递归方法更快,但在非常深的数组的情况下可能会引起内存使用问题。

SimpleArrayLibrary::countMaxDepthIterative(array()); // 1
SimpleArrayLibrary::countMaxDepthIterative(array(1, array())); // 2
SimpleArrayLibrary::countMaxDepthIterative(array(array('foo'))); // 2

countMinDepth

递归地计算数组的最小深度(嵌套子数组的数量)。

第二个参数必须为整数,否则会抛出异常。这是一个递归方法,第二个参数用于递归调用,不应从方法外部使用。

SimpleArrayLibrary::countMinDepth(array()); // 1
SimpleArrayLibrary::countMinDepth(
    array(
        1,
        array()
    )
); // 1
SimpleArrayLibrary::countMinDepth(1); // 0
SimpleArrayLibrary::countMinDepth(array(), 1); // 2

deleteColumns

从多维数组(特别是针对二维数组)的列中删除值。

SimpleArrayLibrary::deleteColumns(array(array('foo' => 2), array()), array('foo')); // array(array(), array())
SimpleArrayLibrary::deleteColumns(array(array(), array()), array('foo')); // array(array(), array())
SimpleArrayLibrary::deleteColumns(array(array('foo' => 2, 'bar' => 1), array()), array('foo', 'bar')); // array(array(), array())

getColumns

从多维数组中检索所需列的值。

第一个参数必须是数组数组的数组(矩阵),否则搜索列没有意义,将抛出异常。

第二个参数必须是可以用作数组索引的元素数组,否则将抛出异常。

第三个参数必须是布尔值,否则将抛出异常。

SimpleArrayLibrary::getColumns(
    array(
        array('a' => 1),
        array(1)
    ),
    array('a')
); // array('a' => array(1))
SimpleArrayLibrary::getColumns(
    array(
        array(1, 2, 3, 4),
        array(1, 2, 3, 4),
        array(1, 2, 3, 4)
    ),
    array(0 ,2)
) // array(0 => array(1, 1, 1), 2 => array(3, 3, 3))
SimpleArrayLibrary::getColumns(
    array(
        array('a' => 1),
        array(1)
    ),
    array('a'),
    true
); // UnexpectedValueException is thrown, not all rows have all required columns as was requested by the third parameter

getRectangularDimensions

此方法检查数组是否为“矩形”或换句话说,所有子数组是否具有相同数量的元素,递归地,以及递归的每一级有多少个元素,如果它是矩形的。

SimpleArrayLibrary::getRectangularDimensions(array(1)); // array(1)
SimpleArrayLibrary::getRectangularDimensions(array(1, array(1))); // -1, not "rectangular"
SimpleArrayLibrary::getRectangularDimensions(
    array(                    // 3 elements
        array(                // 1 element
            array(1, 2, 3, 4) // 4 elements
        ),
        array(                // 1 element
            array(1, 2, 3, 4) // 4 elements
        ),
        array(                // 1 element
            array(1, 2, 3, 4) // 4 elements
        )
    )
); // array(4, 1, 3)

hasAllKeys

检查数组内部是否包含所有必需的键,无论值如何。

SimpleArrayLibrary::hasAllKeys(array('a' => 1), array('a')); // true
SimpleArrayLibrary::hasAllKeys(array(), array()); // true
SimpleArrayLibrary::hasAllKeys(array('b' => 1), array('a', 'b')); // false

hasAllValues

检查数组内部是否包含所有必需的值,无论键如何。值不能是数组。

SimpleArrayLibrary::hasAllValues(array('a' => 1), array(1)); // true
SimpleArrayLibrary::hasAllValues(array(), array()); // true
SimpleArrayLibrary::hasAllValues(array('b', 1), array('a', 'b')); // false

hasAllValuesMultiDimensional

检查数组内部是否包含所有必需的值,无论键如何。值可以是数组。

SimpleArrayLibrary::hasAllValuesMultiDimensional(array('a' => array(1)), array(array(1))); // true
SimpleArrayLibrary::hasAllValuesMultiDimensional(array(array()), array(array())); // true
SimpleArrayLibrary::hasAllValuesMultiDimensional(array('b', 1), array('a', 'b')); // false

hasOnlyKeys

检查数组内部是否只包含所有必需的键,没有其他键。

SimpleArrayLibrary::hasOnlyKeys(array('a' => 1, 2), array('a', 0)); // true
SimpleArrayLibrary::hasOnlyKeys(array('b' => 1, 1), array('b', 0, 1)); // false
SimpleArrayLibrary::hasOnlyKeys(array('b' => 1, 1), array('b')); // false

haveSameKeys

检查两个数组是否具有相同的键,无论值如何。

SimpleArrayLibrary::haveSameKeys(array('a' => 1), array('a' => 2)); // true
SimpleArrayLibrary::haveSameKeys(array(), array()); // true
SimpleArrayLibrary::haveSameKeys(array(1, 'a' => 1), array(2)); // false

haveSameValues

检查两个数组是否具有相同的值,无论键如何。

SimpleArrayLibrary::haveSameValues(array('a' => 1), array(1)); // true
SimpleArrayLibrary::haveSameValues(array(), array()); // true
SimpleArrayLibrary::haveSameValues(array(1), array(2)); // false

insertSubArray

将子数组插入到数组中,位置指向子数组键的位置

第三和第四个参数必须是布尔值,否则将抛出异常。如果第三个参数设置为true,则将覆盖数组中指向子数组键的现有值(如果有的话)。如果第三个参数设置为true,则第四个参数不使用。如果第四个参数设置为true且第三个参数设置为false,则不会更改现有值,但如果第三个和第四个参数都设置为false且子数组键指向已存在的值,则将抛出异常

SimpleArrayLibrary::insertSubArray(array('foo' => 1), array('bar' => 2)); // array('foo' => 1, 'bar' => 2)
SimpleArrayLibrary::insertSubArray(array('foo' => 1), array('foo' => 2), true, false); // array('foo' => 2)
SimpleArrayLibrary::insertSubArray(array('foo' => 1), array('foo' => 2), false, true); // array('foo' => 1)
SimpleArrayLibrary::insertSubArray(array('foo' => 1), array('foo' => 2), false, false); // exception

isAssociative

检查数组是否有任何关联键。

SimpleArrayLibrary::isAssociative(array('a' => 1, array(1))); // true
SimpleArrayLibrary::isAssociative(array(1, 1)); // false
SimpleArrayLibrary::isAssociative(array()); // false

isNumeric

检查数组是否具有所有以零开始并逐个递增的数字键。

SimpleArrayLibrary::isNumeric(array('a' => 1, array(1))); // false
SimpleArrayLibrary::isNumeric(array(1, 1)); // true
SimpleArrayLibrary::isNumeric(array()); // false

isStructureSame

检查两个数组是否具有相同的结构(深度和键)。忽略叶节点的值,只比较键。

SimpleArrayLibrary::isStructureSame(1, 'a'); // true
SimpleArrayLibrary::isStructureSame(array(1, array(1)), array(2, array(3)); // true
SimpleArrayLibrary::isStructureSame(array(1, array(1)), array(1, 1)); // false
SimpleArrayLibrary::isStructureSame(array(), array()); // true

isSubArray

检查数组是否是另一个数组的子数组(子数组的所有键值对是否都存在于数组中)。

第三个参数必须是布尔值,否则将抛出异常。如果第三个参数设置为true,则使用严格的比较(===)来比较数组值,否则使用常规比较(==)。

SimpleArrayLibrary::isSubArray(array(2, 1), array(2)); // true
SimpleArrayLibrary::isSubArray(array('a' => 1, 'b' => array(1)), array('c' => 1)); // false
SimpleArrayLibrary::isSubArray(array('a' => 1, 'b' => array(1)), array('a' => 2)); // false

selectRandomArrayElements

选择随机元素的子数组。保留键关联。如果所需随机元素的数量等于或大于原始数组成员的数量,则返回整个数组。

第二个参数必须是正整数或正整数的字符串表示,否则将抛出异常。

SimpleArrayLibrary::selectRandomArrayElements(array('foo' => 2), 1); // array('foo' => 2)
SimpleArrayLibrary::selectRandomArrayElements(array(1, 2), 1); // array(1) OR array(1 => 2)
SimpleArrayLibrary::selectRandomArrayElements(array('foo' => 2, 'bar'), 3); // array('foo' => 2, 'bar')

setColumn

将值设置到多维数组的列中(特别是针对二维数组,对于三维或更多维度的数组也将工作,但只会更改第二级别的元素)

第四和第五个参数必须是布尔值,否则将抛出异常。如果第四个参数设置为true,则将在缺少列的行中添加列。如果第五个参数设置为true,则将在行中覆盖已存在的列值

SimpleArrayLibrary::setColumn(array(array('foo' => 2), array()), 'foo', 1); // array(array('foo' => 1), array('foo' => 1))
SimpleArrayLibrary::setColumn(array(array('foo' => 2), array()), 'foo', 1, false, false); // array(array('foo' => 2), array())
SimpleArrayLibrary::setColumn(array(array('foo' => 2), array()), 'foo', 1, true, false); // array(array('foo' => 2), array('foo' => 1))

transpose

转置矩阵

将行转换为列,将列转换为行。这在需要将数据集重塑为报告或绘图时非常有用。

SimpleArrayLibrary::transpose(array(array(1, 2, 3). array(4, 5, 6))); // array(array(1, 4), array(2, 5), array(3, 6))