fiedsch / data_util
实用工具
1.1.0RC1
2023-05-04 11:26 UTC
Requires
- php: ^8.0
- ext-ctype: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.0
README
PHP类和辅助函数,在处理数据文件、变量名列表等时可能非常有用。
Data\Helper
提供了一些静态辅助函数
用法
<?php require '/path/to/vendor/autoload.php'; use Fiedsch\Data\Helper; use Fiedsch\Data\Listmanager; use Fiedsch\Data\ArrayRecordCreator; // use Helper::expandExpression() et al. // use Listmanager to perform operations on lists (arrays) // use ArrayRecordCreator to create data records // use Helper::columnIndex() and Helper::columnName() for column name to numerical index mappings
示例
创建变量名列表
创建变量名列表,可能有助于在您最喜欢的统计分析软件中编写代码。
print Helper::getExpression('a001', 'a111'); // 'a{001,111}' Helper::expandExpression('a{001,111}'); // array('a001', 'a002', 'a003', ..., 'a099', 'a100', ..., 'a111') print "someFunction(" . join(',', Helper::expandExpression('a{001,101}')) . ");";
创建文件名列表
Helper::expandExpression('image{00001,00099}.jpg'); // array('image00001.jpg', ..., 'image00099.jpg')
比较列表
注意:结果是列表,而不是集合(例如,请参阅 e.g. union()!)
$listA = ['a','b','c']; $listB = ['c','d','e']; $manager = new Listmanager($listA); $result = $manager->without($listB); // ['a', 'b'] $result = $manager->intersect($listB); // ['c'] $result = $manager->union($listB); // ['a','b','c','c','d','e'] $manager = new Listmanager(['a','b','c','c','b']); $result = $manager->unique(); // ['a','b','c'] // find duplicates in a list $list = ['a','b','a','a','c']; $manager = new Listmanager($list); $result = $manager->duplicates(); // ['a','a'] // $list[0] is considered unique, $list[2] and $list[3] are in the result
创建数据记录
$creator = new ArrayRecordCreator(['foo','bar','baz']); // add values in arbitrary order $creator->foo = '1'; $creator->baz = '2'; $creator->bar = '3'; $record = $creator->getRecord(); // [1, 3, 2] $creator->reset(); $creator->foo = 'FOO'; $record = $creator->getRecord(); // ['FOO', null, null]
与Helper
结合使用
// create target columns 'col001' to 'col100' $creator = new ArrayRecordCreator(Helper::expandExpression('col{001,100}')); $creator->col042 = 'fourtytwo'; // ...
处理从(CSV)文件读取的数据数组
如果您正在处理存储在PHP数组中的数据记录(例如,当从CSV文件读取行时),您可能希望通过“列名”而不是数字索引来访问条目。如果数据最初“存在于”Excel电子表格中,其中列名为“A”、“B”等,这将特别有用。
要将“A”、“B”等映射到相应的数组索引0、1等,可以使用
Helper::columnIndex("A"); // 0 Helper::columnIndex("B"); // 1 // ... Helper::columnIndex("AQ"); // 42
columnIndex()
的逆函数是columnName()
,这可能在与列名到数组索引映射处理时也非常有用。
Helper::columnName(0); // "A" Helper::columnName(1); // "B" // ... Helper::columnName(42); // "AQ"
处理列名映射
假设,您有一个将(一些)变量名映射到列名的数组
['one'=>'A', 'two'=>'C', 'three'=>'X']
(其中“一些”表示映射不必是连续的)。
现在,如果在数据管理步骤中添加了新列,您需要调整映射以匹配下一步的新数据
Helper::prependAndRemap(['one'=>'A', 'two'=>'C', 'three'=>'X'], ['four', 'five']) // ['four'=>'A', 'five'=>'B', 'one'=>'C', 'two'=>'E', 'three'=>'Z']
处理波规格
实验性:可能在未来版本中更改!
考虑一个每年进行12次调查的情况。我们称这些“波”为'01-2023'
、'02-2023'
、...、'12-2023'
。
当我们想要访问“向前12波”的波名称时,我们希望从'08-2023'
移动到'05-2023'
,例如,但'02-2023'到
'11-2022'`也应该正确计算。
Helper::moveWave('08-2023', -3); // '05-2023' Helper::moveWave('02-2023', -3); // '11-2023' Helper::moveWave('10-2023', +3); // '01-2024'
使用不同的模式,如下所示
Helper::moveWave('09/2023', -3, '(\d{2})(\/)(\d{4})', Helper::ORDER_WAVE_FIRST); // '06/2023' Helper::moveWave('2023/09', -3, '(\d{4})(\/)(\d{2})', Helper::ORDER_WAVE_LAST); // '2023/06'