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;