<?php
function echoline($alias) {
echo "$alias\r\n";
}
function dk2en($name) {
return str_replace(array('Æ','Ø','Å','æ','ø','å'), array('Ae','Oe','Aa','ae','oe','aa'), $name);
}
function generate_pieces($s, $prefix_length, $try_suffix) {
$res = array();
for($len = 1; $len <= $prefix_length; $len++) {
$res[] = substr($s, 0, $len);
}
if($try_suffix) {
$res[] = $s[0] . $s[strlen($s) - 1];
}
return $res;
}
function generate_recursive($res, $name_parts, $index, $prefix_length, $try_suffix, $min_length, $max_length, $process_func) {
if($index < count($name_parts)) {
foreach(generate_pieces($name_parts[$index], $prefix_length, $try_suffix) as $piece) {
generate_recursive($res . $piece, $name_parts, $index + 1, $prefix_length, $try_suffix, $min_length, $max_length, $process_func);
}
} else {
if($min_length <= strlen($res) && strlen($res) <= $max_length) {
$process_func($res);
}
}
}
function generate($name, $prefix_length, $try_suffix, $min_length, $max_length, $translate_func, $process_func) {
$name_parts = explode(' ', strtolower($translate_func($name)));
generate_recursive('', $name_parts, 0, $prefix_length, $try_suffix, $min_length, $max_length, $process_func);
}
function generate_smart($name, $length, $translate_func, $process_func) {
$num_parts = count(explode(' ', $name));
$prefix_length = (int)ceil($length / $num_parts) + 1;
if($prefix_length > 2) {
$try_suffix= true;
$prefix_length--;
} else {
$try_suffix= false;
}
generate($name, $prefix_length, $try_suffix, $length, $length, $translate_func, $process_func);
}
generate('Søren Hyggesen Nielsen', 2, true, 5, 5, 'dk2en', 'echoline');
function test($name) {
echo "$name:\r\n";
generate_smart($name, 5, 'dk2en', 'echoline');
}
test('Søren Hyggesen Nielsen');
test('Søren Hyggesen Andersen Nielsen');
test('Søren Ib Hyggesen Andersen Nielsen');
test('Gurli Andersen');
?>