Adicionando sinal de dólar antes de cada string na matriz?

Eu tenho essa string: $str = "(he+is+genius*2)/clever"; que se parece com isso em ordem;

 Array ( [0] => ( [1] => he [2] => + [3] => is [4] => + [5] => genius [6] => ) [7] => * [8] => and [9] => / [10] => clever ) 

O que eu quero fazer é colocar sinal de dólar $ antes de cada string presente em $str mas ignorando números não alfanuméricos e números. No final eu quero ter algo que se pareça com isso;

 $newstr = "($he+$is+$genius*2)/$clever"; 

Para cada valor, verifique se o primeiro caractere (ou o valor inteiro) é feito de caracteres com ctype_alpha , então ctype_alpha com $ :

 // $arr is your array as defined in your question foreach ($arr as &$val) { //OR if (ctype_alpha($val[0])) { if (ctype_alpha($val)) { $val = '$' . $val; } } var_dump($arr); 

Saída:

 array(6) { [0]=> string(3) "$he" [1]=> string(1) "+" [2]=> string(3) "$is" [3]=> string(1) "+" [4]=> string(7) "$genius" ... } 

Segunda solução, verificando se tem um char em qualquer posição:

 foreach ($arr as &$val) { $tmp = str_split($val); foreach ($tmp as $char) { if (ctype_alpha($char)) { $val = '$' . $val; break; } } } 

Basta mapear a matriz usando array_map e verificar se seus valores são string ou não com ctype_alpha , concatenando o $ para ele.

 $array = array ( 0 => "(", 1 => "he", 2 => "+", 3 => "is", 4 => "+", 5 => "genius", 6 => ")", 7 => "*", 8 => "and", 9 => "/", 10 => "clever" ); $strA = array_map (function($a) { if (ctype_alpha($a)) // if only alphabetic characters return it with dollar sign return "$".$a; return $a; // else return normal }, $array ); echo implode("",$strA); // ($he+$is+$genius)*$and/$clever