Better implementation foreach operator with nested array compability.
Installation using composer:
composer require andydune/array-walker
Or if composer was not installed globally:
php composer.phar require andydune/array-walker
Or edit your composer.json
:
"require" : {
"andydune/array-walker": "^1"
}
And execute command:
php composer.phar update
use AndyDune\ArrayWalker\ArrayWalker;
use AndyDune\ArrayWalker\ItemContainer;
// Source array
$array = [
'one' => 1,
'two' => 2,
'three' => 3,
];
$arrayWalker = new ArrayWalker($array);
// Change values
$arrayWalker->addFunction(function (ItemContainer $item) {
$item->setValue($item->getValue() + 10);
});
$result = $arrayWalker->apply();
$result = [
'one' => 11,
'two' => 12,
'three' => 13,
];
$arrayWalker = new ArrayWalker($array);
// Change keys
$arrayWalker->addFunction(function (ItemContainer $item) {
$item->setKey(strtoupper($item->getKey()));
});
$result = $arrayWalker->apply();
$result = [
'ONE' => 1,
'TWO' => 2,
'THREE' => 3,
];
$arrayWalker = new ArrayWalker($array);
// Delete value
$arrayWalker = new ArrayWalker($array);
$arrayWalker->addFunction(function (ItemContainer $item) {
$item->setValue($item->getValue() + 10);
if ($item->getKey() == 'one') {
$item->delete();
}
});
$result = $arrayWalker->apply();
$result = [
'two' => 12,
'three' => 13,
];