【问题标题】:Adding dollar sign before each string in array?在数组中的每个字符串之前添加美元符号?
【发布时间】:2014-09-16 12:18:00
【问题描述】:

我有这个字符串:$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";

【问题讨论】:

  • ...然后你想eval,我猜?不,那不是天才。与其看eval,不如看一个安全的表达引擎:symfony.com/doc/current/components/expression_language/…
  • 什么是评估?我不想使用 eval,我想拥有该格式并显示它。
  • 嗯,好的。这很不寻常,但也没有那么糟糕。每当您想eval...时,请记住以上内容;)
  • 如何从给定的字符串中获取数组?

标签: php arrays preg-replace preg-match substr


【解决方案1】:

对于每个值,检查第一个字符(或整个值)是否由带有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;
    }
  } 
}

【讨论】:

  • 这是有效的,但例如如果字符串是 (he2+is+genius*2)/clever"; 它不会在 he2 中放入美元符号,我只是不想在数字中放入美元符号像字符串中的 2 一样独立。除非数字是像 he2 这样的字符串的一部分。
  • 试试if (ctype_alpha($val[0])) { 。正如我在答案中所说,它只会检查第一个字符。或者您想检查该值是否在任何位置包含字符,即使在中间?
  • @user2579351 我编辑了我的答案并为此添加了第二个解决方案。它将每个值分解为字符,如果任何字符是字母,它会在前面加上 $
  • 抱歉,Clement,是否可以防止将美元符号添加到某些字符串中,例如,如果有一个单词 she,$arr 中的谁或他们不应该添加到美元符号这些字符串
  • @user2579351 我不是你的私人助手。 ;) Stack Overflow 上有很多人很乐意为您提供帮助。如果您还有其他问题,请适当地问一个新问题并解释您的新问题,使用 cmets 提问是不好的。这样你会得到更多好的和快速的帮助! :)(如果需要,您可以在新问题中添加指向此问题的链接,以便帮助人们理解上下文)
【解决方案2】:

只需使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多