字符到字母数值

时间:2014-12-06 14:35:54

标签: php html arrays loops for-loop

好的,我想找到字母表中字符的数值。所以a = 1,b = 2 ..z = 26。下面我刚刚调用了字符串密码,并运行for循环来设置一个密码数组,使其等于字符串中的密码,因此密码[1] = a,但是因为我希望用户输入字符串,所以可以是密码[1] = z。无论如何,然后我运行另一个循环,它有一个switch语句来查看它等于什么字符,一旦switch语句找到该字符,它就将密码数组设置为任何字母数字值。由于某种原因,结束代码是1 1 1 1 2 2 3 3,因此由于某种原因它的关闭1值。 IDK如何发生这种情况。有人可以帮忙吗

<?php
$password = "aabbccdd";
$password_length = strlen($password);
$password_array = array($password_length); 
$letter= array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

for ($counter = 0; $counter < $password_length; $counter++) {
    $password_array[$counter] = $password{$counter};

    for ($x = 0; $x < 26 ; $x++) {
        switch ($password_array[$counter]) {
            case strtolower($letter[$x]):
                $password_array[$counter] = $x;
                break;
        }
    }
    echo $password_array[$counter];
}
?> 

3 个答案:

答案 0 :(得分:0)

数组从0开始,而不是1.因此$ password [1]将等于B,而不是A

答案 1 :(得分:0)

您应该将$letter[$x]的值与$password{$counter}进行比较,而不是$password_array[$counter]。不要忘记将$x加1,因为数组索引以0开头。

$password = "aabbccdd" ;
$password_length = strlen($password);
$password_array = array($password_length); 
$letter= array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

for($counter = 0; $counter < $password_length; $counter++ ) {
    for($x = 0; $x < 26 ; $x++ ){
        switch ($password{$counter}) {
            case strtolower($letter[$x]):
                $password_array[$counter] = $x + 1;
                break ; 
        }
    }
    echo $password_array[$counter] ; 
}

输出

11223344

工作演示:http://codepad.org/7PT4Z9t3

替代解决方案

通过将$letter更改为关联数组可以简化您的代码,其中每个字母都是关键字,其数值就是相应的值。例如,$letter['a']1$letter['b']2,依此类推。而且,您只需要一个for循环。请参阅以下代码

$password = "Aabbccdd" ;
$password_length = strlen($password);
$password_array = array($password_length); 
$letter = array(
 'a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5,'f'=>6,'g'=>7,'h'=>8,'i'=>9,'j'=>10,
 'k'=>11,'l'=>12,'m'=>13,'n'=>14,'o'=>15,'p'=>16,'q'=>17,'r'=>18,'s'=>19,'t'=>20,
 'u'=>21,'v'=>22,'w'=>23,'x'=>24,'y'=>25,'z'=>26);

for($counter = 0; $counter < $password_length; $counter++ ) {
    $password_array[$counter] = $letter[strtolower($password{$counter})];
    echo $password_array[$counter] ; 
}

输出

11223344

工作演示:http://codepad.org/E5BgR5Lb

答案 2 :(得分:0)

$password = "Aabbccdd" ;

$lowercased_password = strtolower($password);
$password_length = strlen($password);
$counter = 0;

while ($counter < $password_length) {
    echo (ord($lowercased_password[$counter])-96);
    $counter++;
}

输出:

11223344

有些说明:

我自己的想法:

  • 为安全起见,您应添加一些验证,以确保输入包含字母字符。
  • 将所有内容强制为小写会降低密码&#34;强度&#34;
    • (如果您决定允许使用upercase字符,则需要对此代码进行一些(非常)轻微修改)