Php 查找字符串中字母字符的总和

Php 查找字符串中字母字符的总和,php,arrays,Php,Arrays,我想从数组中获取所有选定值的总和。如果用户搜索某个词,则应返回搜索词的总和。下面的例子 $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 = a

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

$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\u keys()
函数,但它不起作用。

您可以使用创建字符数组,然后将其转换为总和。用于获取每个字母的ASCII码,而不是文字数组(仅当您希望每个字符具有任意权重时,该数组才有用;请参阅其他答案)


您可以将
$data
拆分为一个数组,并循环字符串中的每个字符。搜索数组中的字符串,如果它存在,则将从
array\u Search()
获得的索引添加到
$sum
变量中

$sum = 0;
foreach (str_split($data) as $char) {
    if (($index = array_search($char, $chars)) !== false) {
        $sum += $index;
    }
}
echo $sum;
  • 现场演示

若要避免在数组中搜索字符的值,请使用
array\u flip()
使其成为由字符本身索引的数组。然后只需添加项目(如果项目不存在,请使用
添加0)


$search每次都写得太多了。我尝试更改它,现在它返回的和为零
<?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
$sum = 0;
foreach (str_split($data) as $char) {
    if (($index = array_search($char, $chars)) !== false) {
        $sum += $index;
    }
}
echo $sum;
$sum = 0;
$chars = array_flip($chars);
foreach (str_split($data) as $char) {
    $sum += $chars[$char] ?? 0; 
}
echo $sum;