这是我的代码:
$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 = "جا باب جب";
答案 0 :(得分:2)
请注意,这里发生的是字符串中的每个字符都被拆分,即15
,d
的替换将被分为1
和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()
将字符串拆分为给定的分隔符(此处为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()