$code = 'PN45HA 70448'
$first = substr($postcode, strlen($postcode)-3); // 448
$second = substr($postcode, strlen($first)); // PN45HA 70
$postcode = $first . ' ' . $second; // PN45HA 70 448
Проблема в том, что не все ваши почтовые индексы являются простыми 6-символьными. Вы просто добавляете пробел перед последними 3 символами в любой передаваемой вами строке.
Вам может понадобиться использовать регулярное выражение:
$code = preg_replace('/([A-Z][0-9][A-Z])\s*([0-9][A-Z][0-9])/', '\1 \2', $code);
Это займет любую строку, которая выглядит как почтовый индекс, с необязательными пробелами между двумя половинами и вставит один пробел.