Gressus Tools is a collection of PHP Scripts for easy Data Manipulation, CSV read and write and Object Access.
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
}
]
(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
}
}
namespace Gressus\Tools;
require('../autoload.php');
$csvService = new CsvService();
$csvService->read('../Data/example-data.csv');
print_r($csvService->getAssociatedArrayData());
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();
Many Thanks to TUDOCK. I originally started the development of these Tools working in the nice office at TUDOCK.