【问题标题】:PHP: Converting words/strings to numbers and add them upPHP:将单词/字符串转换为数字并将它们相加
【发布时间】:2014-04-05 06:52:29
【问题描述】:
  1. 我有一个表单,我想在其中输入任意单词组合,然后提交。
  2. 假设我输入“bababa ba
  3. 这必须变成“2+1+2+1+2+1+2+1 =12
  4. 后跟:12 = 1+2 = 3答案总是必须低于 10。3 是我想看到的唯一答案。

一个完全的初学者,几个星期以来我一直在搞乱$let_arr = ["a" => "1", "b" => "2",];str_splitexplode 和其他所有东西。想不通。

谁能帮助我进行中?也许这些见解会帮助我更进一步。

【问题讨论】:

  • 学习 PHP 并自己动手。

标签: php sum add


【解决方案1】:

字母实际上是数字 - 它们有一个序号 ASCII 值,可以通过ord() 检索。例如,ord('a') 是 97。因此,您不需要数组作为查找表。

首先,让我们从字符串中去除所有非字母字符并将所有内容转换为小写(因为ord('a') != ord('A')):

$str = 'bababa ba';
$letters = preg_replace('~[^a-z]~i', '', $str); // remove all non-alpha characters
$letters = strtolower($letters); // convert to lowercase

现在让我们总结一下单个字母:

$sum = 0;
for ($i = 0; $i < strlen($letters); $i++)
{
    $sum += ord($letters[$i]) - 96; // 96 == ord('a') - 1
}

最后,我们要得到数字总和:

$ds = 0;
while ($sum != 0)
{
    $ds += $sum % 10;         // extract and add last digit
    $sum = (int) ($sum / 10); // remove last digit
}

现在,$ds 将包含您的结果。我希望,这就是你所要求的。

【讨论】:

  • 这是一些令人难以置信的编码。但是可能需要一个数组。必须研究更长时间(还没有看到任何输出出现)。只有 9 个数字来指定所有字母。这是我的旧数组:$letters = array ('a' =&gt; 1, 'b' =&gt; 2, 'c' =&gt; 3, 'd' =&gt; 4, 'e' =&gt; 5, 'f' =&gt; 6, 'g' =&gt; 7, 'h' =&gt; 8, 'i' =&gt; 9, 'j' =&gt; 1, 'k' =&gt; 2, 'l' =&gt; 3, 'm' =&gt; 4, 'n' =&gt; 5, 'o' =&gt; 6, 'p' =&gt; 7, 'q' =&gt; 8, 'r' =&gt; 9, 's' =&gt; 1, 't' =&gt; 2, 'u' =&gt; 3, 'v' =&gt; 4, 'w' =&gt; 5, 'x' =&gt; 6, 'y' =&gt; 7, 'z' =&gt; 8)];
  • 你也可以在没有数组的情况下做到这一点:sum += ((ord($letters[$i]) - 96) % 9) + 1; 这只是一些数学运算。如果要显示输出,请附加最后一行:echo $ds;
【解决方案2】:

要找出 a=1 和 b=2 以及...这个简单的形式/函数: 你可以在这里试试这个“简单”的代码:http://wistudat.be/try/calcuword.php

<form action="./calcuword.php" onsubmit="" method="post"> 
<b>Enter your word: </b>
<br> 
<input type="text" name="word">
<br> 
<input type="submit" value="SUBMIT">
</form>
<p style="color:red;">

<?php 

$word= filter_var($_POST['word'], FILTER_SANITIZE_STRING);
echo "String : ".$word ." to integer : ";

function CtoI($alfa)
{
$array = array_flip(range(a, z));
return $array[$alfa] + 1;
}

$chars = str_split($word);
foreach($chars as $char){
if($word){
echo CtoI($char);
if ($char === end($chars)){
echo "=";
}
else{
echo "+";
}

} //End if($word)
} //End foreach

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2012-02-09
    • 1970-01-01
    • 2015-01-03
    • 2023-03-09
    • 1970-01-01
    • 2014-05-28
    • 2019-05-19
    相关资源
    最近更新 更多