61 lines
1.1 KiB
PHP
61 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;
|
|
}
|
|
|
|
?>
|