62 lines
1.1 KiB
PHP
62 lines
1.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace alveolata\map;
|
||
|
|
||
|
// require_once(DIR_ALVEOLATA . '/definitions.php');
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param array $map {map<string,§y>}
|
||
|
* @param \Closure $transformator {function<§x,string,§y>}
|
||
|
* @return array
|
||
|
* @author Christian Fraß <frass@greenscale.de>
|
||
|
*/
|
||
|
function map/*<§x,§y>*/(
|
||
|
array $map,
|
||
|
\Closure $transformator
|
||
|
) : array
|
||
|
{
|
||
|
$map_ = [];
|
||
|
foreach ($map as $key => $value) {
|
||
|
$value_ = $transformator($value, $key);
|
||
|
$map_[$key] = $value_;
|
||
|
}
|
||
|
return $map_;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param array $pairs {list<record<key:string,value:§x>>}
|
||
|
* @return array {map<string,§x>}
|
||
|
* @author Christian Fraß <frass@greenscale.de>
|
||
|
*/
|
||
|
function from_pairs/*<§x>*/(
|
||
|
array $pairs
|
||
|
) : array
|
||
|
{
|
||
|
$map = [];
|
||
|
foreach ($pairs as $pair) {
|
||
|
$map[$pair['key']] = $pair['value'];
|
||
|
}
|
||
|
return $map;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param array $map {map<string,§x>}
|
||
|
* @return array {list<record<key:string,value:§x>>}
|
||
|
* @author Christian Fraß <frass@greenscale.de>
|
||
|
*/
|
||
|
function to_pairs/*<§x>*/(
|
||
|
array $map
|
||
|
) : array
|
||
|
{
|
||
|
$pairs = [];
|
||
|
foreach ($map as $key => $value) {
|
||
|
\array_push($pairs, ['key' => $key, 'value' => $value]);
|
||
|
}
|
||
|
return $pairs;
|
||
|
}
|
||
|
|
||
|
?>
|