用数字替换替换字符串中的数字

时间:2013-03-30 20:00:37

标签: php arrays sum

假设我有这两个数组

   $letters = array('a','b','c', 'd', 'e');
   $replace = array( 1,  5,  10, 15 , 20);
   $text = "abd cde dee ae d" ;
   $re = str_replace($letters, $replace, $text) ;
   echo $re ;  //this output:

     1515 101520 152020 120 15 

现在我想要为每个单词加上上面的数字,结果应该是这样的:

     21 45 55 21 15
我试过的是:

    $resultArray = explode(" ", $re); 

    echo array_sum($resultArray).'<br />' ; // but it output wrong result. 
                                           // it output this : 255190

我怎样才能实现这一目标?

任何帮助太多的帮助。

编辑:

这样的阿拉伯字母

   $letters = array('ا', 'ب','ج','د' ) ;
   $replace = array(1, 5, 10, 15 ) ;
   $text = "جا باب جب"; 

2 个答案:

答案 0 :(得分:3)

将字符串转换为数组并使用array_sum

array_sum(explode(' ', $re));

修改

抱歉,误解了:

$letters = array('a','b','c', 'd', 'e');

$replace = array( 1,  5,  10, 15 , 20);

$text = "abd cde dee ae d" ;

$new_array = explode(' ', $text);

$sum_array = array();

foreach ($new_array as $string)
{

  $nums = str_split($string);

  foreach ($nums as &$num)
  {
    $num = str_replace($letters, $replace, $num);
  }

  $sum_array[] = array_sum($nums);

}

echo implode(' ', $sum_array);

答案 1 :(得分:1)

我不建议用数字替换字母,而是建议一次只查找替换数组中的字母:

修改

<?php
    $text = "abd cde dee ae d";
    $replace = array('a' => 1, 'b' => 5, 'c' => 10, 'd' => 15, 'e' => 20);
    $letters = str_split($text);
    $sums = array(0);

    foreach ($letters as $letter) {
        // Add a new element to the sum array.
        if ($letter == ' ') {
            $sums[] = 0;
        } else {
            $sums[count($sums) - 1] += $replace[$letter];
        }
    }

    echo implode(" ", $sums);
?>

这是一个工作示例: http://codepad.org/Cw71zuKD