-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、 の置換は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 文字) で文字列を分割することです。これを参照してください。

アラビア文字でこれを試してください

   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 に答える