求数组数

时间:2013-03-31 18:32:56

标签: php sum

这是我的代码:

   $letters = array('a','b','c', 'd', 'e');
   $replace = array( 1,  5,  10, 15 , 20);
   $text = "abd cde dee ae d" ;
   $res = array_sum(str_split(str_replace($letters, $replace, $text))) ;

  echo $res ; // this output:   40

应输出:157

这意味着当我用数字替换字母时,我会按array_sum

计算它们

它有什么不对吗?

编辑:

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

2 个答案:

答案 0 :(得分:2)

请注意,这里发生的是字符串中的每个字符都被拆分,即15d的替换将被分为15。分别。相反,试试这个:

$replace = array( '1 ',  '5 ',  '10 ', '15 ' , '20 ');
$letters = array('a','b','c', 'd', 'e');
$text = "abd cde dee ae d" ;
$res = array_sum(explode(' ', str_replace($letters, $replace, $text))) ;
echo $res ;

这里发生的是explode()将字符串拆分为给定的分隔符(此处为SPACE字符)。请参阅this

通过阿拉伯语字母试试这个

   function mb_str_split( $string ) {
     return preg_split('/(?<!^)(?!$)/u', $string );
     } 
   $res = array_sum(str_replace($letters, $replace,mb_str_split( $text))) ;

答案 1 :(得分:1)

str_split()按字母分割,但如果 后用字母替换了数字,则适用。这意味着,例如“20”将被分成“2”和“0”。

您可能希望首先拆分,然后在array_map()

的帮助下替换这些字母