Use preg_replace
like this:
$new = preg_replace('/(\d)([a-z])/i', "$1 $2", $arr);
regex101 demo
(\d)
match and catches a digit. ([a-z])
matches and catches a letter. In the replace it puts back the digit, adds a space and puts back the letter.
If you don't want to use backreferences, you can use lookarounds:
$new = preg_replace('/(?<=\d)(?=[a-z])/i', ' ', $arr);
If you want to replace between letter and number as well...
$new = preg_replace('/(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d)/i', ' ', $arr);
regex101 demo
(?<=\d)
is a positive lookbehind that makes sure that there is a digit before the current position.
(?=[a-z])
is a positive lookahead that makes sure that there is a letter right after the current position.
Similarly, (?<=[a-z])
makes sure there's a letter before the current position and (?=\d)
makes sure there's a digit right after the current position.
An different alternative would be to split and join back with spaces:
$new_arr = preg_split('/(?<=\d)(?=[a-z])/i', $arr);
$new = implode(' ', $new_arr);
Or...
$new = implode(' ', preg_split('/(?<=\d)(?=[a-z])/i', $arr));