<?php
/**
*
* @param string $word
* @return string
* @throws Exception
*/
function f2($word)
{
// Da PHP schwach typisiert ist, könnte $word so ziemlich alles enthalten.
if (!is_string($word)) {
throw new Exception(sprintf(
'Function "%s": Parameter "%s" must be of type "%s"',
__FUNCTION__, 'word', 'string'));
}
// Die UTF-8-Variante von str_split.
$a = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
// Sicherstellen, dass die beiden Variablen in jedem Fall initialisiert
// sind.
$first = '';
$last = '';
// Das Array muss mindestens zwei Elemente haben, damit vorne und hinten
// eins entfernt werden kann. In diesem Fall *müssen* die beiden Elemente
// jedoch auch entfernt werden, da shuffle sie sonst in die falsche
// Reihenfolge bringen könnte "ab" => "ba". Bei einem leeren Array oder
// einem mit einem Element kann shuffle dagegen keine Reihenfolge ändern.
if (count($a) > 1) {
$first = array_shift($a);
$last = array_pop($a);
}
// Der "Rumpf" des Worts (z. B. "esezeiche") wird durchgemischt.
shuffle($a);
// Alles wieder zusammenkleben.
return $first . implode('', $a) . $last;
}
error_reporting(-1);
ini_set('display_errors', 1);
$tests = array(
'',
'L',
'Ln',
'Len',
'Lesezeichen'
);
echo "<pre>\n";
foreach ($tests as $test) {
printf("Test: %-15s => %-15s\n", $test, f2($test));
}
// Fehler künstlich provozieren.
f2(new stdClass());