Добавлять знак доллара перед каждой строкой в ​​массиве?

У меня есть эта строка: $str = "(he+is+genius*2)/clever"; который выглядит так в массиве;

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

То, что я хочу сделать, это поместить знак доллара $ перед каждой строкой в $str но игнорируя не буквенно-цифровые и цифры.
В конце я хочу иметь что-то похожее на это;

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

0

Решение

Для каждого значения проверьте, состоит ли первый символ (или целое значение) из символов с ctype_alpha, а затем начать с $ :

// $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);

Выход :

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

Второе решение, проверяя, есть ли у него символ в любой позиции:

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

Другие решения

Просто сопоставьте массив, используя array_map и проверьте, являются ли их значения строковыми или нет ctype_alpha, объединяя $ к этому.

$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
0

По вопросам рекламы [email protected]