$part muss nicht initialisiert werden, dafür aber $result (afaik). Wenn man das nicht macht, wird $result am Ende jedes Schleifendurchlaufs wieder gelöscht.Zitat von dead_orc
Außerdem würde ich die Zeile $part = substr($string, $i, 3); durch $part = substr($string, $i, min(3, (strlen($string) - $i) % 3); ersetzen, sonst könnte es zu Problemen mit Strings kommen, die kein Vielfaches von 3 als Länge haben.