скажем, у меня есть эти два массива
$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 = "جا باب جب";
Преобразуйте строку в массив и используйте 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);
Вместо того, чтобы заменять буквы цифрами, я бы предложил просто искать буквы в массиве replace по одному за раз:
РЕДАКТИРОВАТЬ
<?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