首页 > 解决方案 > 查找字符串中字母字符的总和

问题描述

我想从数组中获取所有选定值的总和。如果用户搜索一个词,它应该返回搜索词的总和。下面的例子。

$chars = array(1 => 'a', 2 => 'b', 3 => 'c'); // Chars start from a-z
$data = 'aac'; // for example

foreach ($chars as $results) {
    if (strpos($results, $data) !== false) {
         $search = array_search($results, $chars);
    }
}

如果搜索是,"aac"那么结果应该是1 + 1 + 3 = 5

我已经尝试了该array_keys()功能,但它不起作用。

标签: phparrays

解决方案


您可以使用str_split创建一个字符数组,然后只将小写字母字符累加 到一个总和中。用于获取每个字母的 ASCII 代码,而不是硬编码文字数组(该数组仅在您想要每个字符的任意权重时才有用;请参阅其他答案)。ord

<?php
$data = "aac";

$result = array_reduce(str_split($data), function ($a, $e) {    
    return $a + (ctype_lower($e) ? ord($e) - 96 : 0);
}, 0);

echo $result; // => 5

如果您希望忽略大小写并"A"视为"a",您可以使用strtolower.

<?php
$data = "aAc";

$result = array_reduce(str_split(strtolower($data)), function ($a, $e) {    
    return $a + (ctype_lower($e) ? ord($e) - 96 : 0);
}, 0);

echo $result; // => 5

推荐阅读