gressus / tools
Tools for PHP Development
Installs: 45 643
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 3
Open Issues: 0
pkg:composer/gressus/tools
Requires
- php: >= 5.4.0
README
Gressus Tools is a collection of PHP Scripts for easy Data Manipulation, CSV read and write and Object Access.
Data Mapping
You can map a source array to a target array and even apply filters and post converters. This can help you when programming Import-Scripts with large datasets from one format to another.
namespace Gressus\Tools; require('../autoload.php'); $dataMapperService = new DataMapperService( array( 'Identifier' => 'id', 'Group + Name' => new Mapper\Concat(array( 'group', new Mapper\FirstNotEmpty(array('full_name','name'))) ), 'Counter' => new Mapper\Counter(), 'FirstChar' => new Mapper\FirstChar('name'), 'Name' => new Mapper\FirstNotEmpty(array('full_name','name')), 'Hash' => new Mapper\All(), 'Weapons' => new Mapper\ArrayPath('special/weapons'), ), array( new Converter\Serialize('Hash'), new Converter\Md5('Hash'), new Converter\Implode('Weapons'), ), array( array('score',new Filter\GreaterThanFilter(0)), ), array( array('Counter',new Filter\GreaterThanFilter(1)), ) ); $data = array( array('id' => '1', 'group' => 'Police', 'name' => 'Melanie', 'score' => 1, 'full_name' => 'Melanie Meyer', 'special' => array('weapons' => array('Walter','Tonfa'))), array('id' => '2', 'group' => 'Police', 'name' => 'Kerstin', 'score' => 1, 'full_name' => 'Kerstin Meyer', 'special' => array('weapons' => array('Walter','Tonfa'))), array('id' => '3', 'group' => 'Police', 'name' => 'Thomas', 'score' => 4, 'full_name' => 'Thomas Taffil', 'special' => array('weapons' => array('Walter','Tonfa'))), array('id' => '5', 'group' => 'Gangster', 'name' => 'Hafti', 'score' => 10, 'special' => array('weapons' => array('Knife','AKAI 47'))), array('id' => '6', 'group' => 'Gangster', 'name' => 'Fler', 'score' => 0), array('id' => '7', 'group' => 'Press', 'name' => 'Steiger', 'score' => 0), array('id' => '8', 'group' => 'Press', 'name' => 'Sz', 'score' => 5), array('id' => '9', 'group' => 'Press', 'name' => 'Max', 'score' => 1), array('id' => '10','group' => 'Press', 'name' => 'Max', 'score' => 1), ); $mappedData = $dataMapperService->map($data); print(json_encode($mappedData,JSON_PRETTY_PRINT));
Output:
[
{
"Identifier": "2",
"Group + Name": "Police Kerstin Meyer",
"Counter": 2,
"FirstChar": "K",
"Name": "Kerstin Meyer",
"Hash": "150ca40755bb997e775fcd0a94fc0147",
"Weapons": "Walter , Tonfa"
},
{
"Identifier": "3",
"Group + Name": "Police Thomas Taffil",
"Counter": 3,
"FirstChar": "T",
"Name": "Thomas Taffil",
"Hash": "e80d48253791a5a083f2b49b0d4a7b70",
"Weapons": "Walter , Tonfa"
},
{
"Identifier": "5",
"Group + Name": "Gangster Hafti",
"Counter": 4,
"FirstChar": "H",
"Name": "Hafti",
"Hash": "e8bf5ce0d5e2d75346b5b4e1282c47d6",
"Weapons": "Knife , AKAI 47"
},
{
"Identifier": "8",
"Group + Name": "Press Sz",
"Counter": 5,
"FirstChar": "S",
"Name": "Sz",
"Hash": "8ad9d3eae1f9fa75fdbcb3fbd0bac00e",
"Weapons": null
},
{
"Identifier": "9",
"Group + Name": "Press Max",
"Counter": 6,
"FirstChar": "M",
"Name": "Max",
"Hash": "8a85c8790f0029a12584bec43c1734d0",
"Weapons": null
},
{
"Identifier": "10",
"Group + Name": "Press Max",
"Counter": 7,
"FirstChar": "M",
"Name": "Max",
"Hash": "9b5b1d4c5ca965f0d2bcd4e039b48cba",
"Weapons": null
}
]
Data Reducing
(behaves like MySQL group by on PHP Arrays)
namespace Gressus\Tools; require('../autoload.php'); $reducer = new ReducerService( 'group', array( 'id' => new Reducer\ConcatReducer(), 'name' => new Reducer\ConcatReducer(array('distinct' => true)), 'score' => new Reducer\SumReducer(), ), array( array('score',new Filter\GreaterThanFilter(0)), array('score',new Filter\LowerThanFilter(10)), ) ); $data = array( array('id' => '1','group' => 'Police', 'name' => 'Melanie','score' => 1), array('id' => '2','group' => 'Police', 'name' => 'Kerstin','score' => 1), array('id' => '3','group' => 'Police', 'name' => 'Thomas','score' => 4), array('id' => '5','group' => 'Gangster', 'name' => 'Hafti','score' => 10), array('id' => '6','group' => 'Gangster', 'name' => 'Fler','score' => 0), array('id' => '7','group' => 'Press', 'name' => 'Steiger','score' => 0), array('id' => '8','group' => 'Press', 'name' => 'Sz','score' => 5), array('id' => '9','group' => 'Press', 'name' => 'Max','score' => 1), array('id' => '10','group' => 'Press', 'name' => 'Max','score' => 1), ); $reducedData = $reducer->reduce($data); print(json_encode($reducedData,JSON_PRETTY_PRINT));
Output:
{
"Police": {
"id": "1, 2, 3",
"name": "Melanie, Kerstin, Thomas",
"score": 6
},
"Press": {
"id": "8, 9, 10",
"name": "Sz, Max",
"score": 7
}
}
Read CSV Data
namespace Gressus\Tools; require('../autoload.php'); $csvService = new CsvService(); $csvService->read('../Data/example-data.csv'); print_r($csvService->getAssociatedArrayData());
Write CSV Data
namespace Gressus\Tools; require('../autoload.php'); $data = array( array('id' => '1', 'group' => 'Police', 'name' => 'Melanie', 'score' => 1, 'full_name' => 'Melanie Meyer'), array('id' => '2', 'group' => 'Police', 'name' => 'Kerstin', 'score' => 1, 'full_name' => 'Kerstin Meyer'), array('id' => '3', 'group' => 'Police', 'name' => 'Thomas', 'score' => 4, 'full_name' => 'Thomas Thiel'), array('id' => '5', 'group' => 'Gangster', 'name' => 'Hafti', 'score' => 10,), array('id' => '6', 'group' => 'Gangster', 'name' => 'Fler', 'score' => 0), array('id' => '7', 'group' => 'Press', 'name' => 'Steiger', 'score' => 0), array('id' => '8', 'group' => 'Press', 'name' => 'Sz', 'score' => 5), array('id' => '9', 'group' => 'Press', 'name' => 'Max', 'score' => 1), array('id' => '10','group' => 'Press', 'name' => 'Max', 'score' => 1), ); $csvService = new CsvService(); $csvService ->setAssociatedArrayData($data) ->setFileName('../Data/example-data-write.csv') ->write();
Credits
Many Thanks to TUDOCK. I originally started the development of these Tools working in the nice office at TUDOCK.