-1

这是我的代码:

   $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 = "جا باب جب"; 
4

2 回答 2

2

看,这里发生的事情是字符串中的每个字符都被拆分,即15替换 ford将拆分为1and 5。分别地。相反,试试这个:

$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()在给定的分隔符处分割字符串(这里是空格字符)。看到这个

用阿拉伯字母试试这个

   function mb_str_split( $string ) {
     return preg_split('/(?<!^)(?!$)/u', $string );
     } 
   $res = array_sum(str_replace($letters, $replace,mb_str_split( $text))) ;
于 2013-03-31T18:42:52.493 回答
1

str_split()按字母拆分,但如果用数字替换字母后应用。这意味着,例如“20”将被拆分为“2”和“0”。

您可能想先拆分,然后在的帮助下替换字母array_map()

于 2013-03-31T18:42:37.920 回答