php - 查找字符串中字母字符的总和
问题描述
我想从数组中获取所有选定值的总和。如果用户搜索一个词,它应该返回搜索词的总和。下面的例子。
$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()
功能,但它不起作用。
解决方案
您可以使用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
推荐阅读
- python - 为什么我在使用 pipenv 安装 scrapy 时会出现此错误?
- javascript - 在 React 中过滤特定的表行
- mongodb - Mongoose 使用 Express 填充,不在生产环境中工作(Heroku)
- java - 有没有更好的方法可以在不使用反射的情况下从对象中克隆值?
- azure - Azcopy 在 Linux Openwrt 上失败(错误的函数名称)
- git - 如何从 VPN 中排除 GIT
- java - 我想通过使用单元测试帮助找到我的 java 程序中的所有缺陷
- c++ - 初始化两个二维数组,并用 0 填充其中一个数组的第一列和第一行
- c++ - 编译器不生成移动构造函数
- windows - 使用别名运行循环