Transform is a simple library which aims to make using PHP's array_map
function a more pleasant experience - and resulting in cleaner code.
Transform is a collection of helper functions for common transform actions.
For a great companion library of predicates to make your array_filter
code also look great, see Pentothal.
From this point on, assume the TomPHP\Transform
namespace is used like so:
use TomPHP\Transform as T;
Take this code:
$names = array_map(
function ($user) {
return $user->getName();
},
$allUsers
);
Using Transform this looks like this:
$names = array_map(T\callMethod('getName'), $allUsers);
Using composer:
composer require tomphp/transform
Multiple transformations can be composed using the chain
function:
T\chain(T\getProperty('user'), T\getElement('name'));
// Is equivalent to:
function ($object) {
return $object->user['name'];
}
If you want to chain together a collection of callMethod
, getProperty
and
getElement
calls, the __()
function provides a builder to write this in
a more elegant way.
Consider:
$dobs = array_map(
function (User $user) {
return $user->getMetaData()['dob']->format('Y-m-d');
},
$users
);
With the builder you can simply write:
use function TomPHP\Transform\__;
$dobs = array_map(__()->getMetaData()['dob']->format('Y-m-d'), $users);
T\classMethod('getName');
// Is equivalent to:
function ($object) {
return $object->getName();
}
T\classMethod('format', 'Y-m-d');
// Is equivalent to:
function ($object) {
return $object->format('Y-m-d');
}
T\callStatic('getSomethingWith', 'param1', 'param2');
// Is equivalent to:
function ($object) {
return $object::getSomethingWith('param1', 'param2');
}
// or to:
function ($classAsString) {
return $classAsString::getSomethingWith('param1', 'param2');
}
T\getProperty('name');
// Is equivalent to:
function ($object) {
return $object->name;
}
T\getElement('name');
// Is equivalent to:
function ($array) {
return $array['name'];
}
T\getElement(['user', 'name']);
// Is equivalent to:
function ($array) {
return $array['user']['name'];
}
T\prepend('prefix: ');
// Is equivalent to:
function ($value) {
return 'prefix: ' . $value;
}
T\prepend(' - suffix');
// Is equivalent to:
function ($value) {
return $value . ' - suffix';
}
T\argumentTo('strtolower');
// Is equivalent to:
function ($value) {
return strtolower($value);
}
You can also provide a list of arguments using __
as the placeholder for where
you want the value inserted:
use const TomPHP\Transform\__;
T\argumentTo('strpos', ['Tom: My name is Tom', __, 4]);
// Is equivalent to:
function ($value) {
return strpos('Tom: My name is Tom', $value, 4);
}