Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符到字母数字值_Php_Html_Arrays_Loops_For Loop - Fatal编程技术网

Php 字符到字母数字值

Php 字符到字母数字值,php,html,arrays,loops,for-loop,Php,Html,Arrays,Loops,For Loop,我想从字母表中找出一个字符的数值。所以a=1,b=2,z=26。下面我刚刚调用了字符串password,并运行for循环将密码数组设置为等于字符串中的,因此password[1]=a,但因为我希望用户输入字符串,所以它可以是password[1]=z。无论如何,然后我运行另一个循环,它有一个switch语句,看看它是否等于哪个字符,一旦switch语句找到那个字符,它就会将密码数组设置为字母数字值。出于某种原因,结束代码为1 1 2 3 3,因此出于某种原因,其值为1。IDK这是怎么发生的。有人

我想从字母表中找出一个字符的数值。所以a=1,b=2,z=26。下面我刚刚调用了字符串password,并运行for循环将密码数组设置为等于字符串中的,因此password[1]=a,但因为我希望用户输入字符串,所以它可以是password[1]=z。无论如何,然后我运行另一个循环,它有一个switch语句,看看它是否等于哪个字符,一旦switch语句找到那个字符,它就会将密码数组设置为字母数字值。出于某种原因,结束代码为1 1 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];
}
?> 

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

您应该将$letter[$x]的值与$password{$counter}进行比较,而不是将$password_数组[$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] ; 
}
工作演示:

替代解决方案 可以通过将$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] ; 
}
工作演示:

一些注意事项:

大部分魔法都发生在ord上-请在此处阅读: 我自己的想法:

为了安全起见,您应该添加一些验证,以确保输入只包含字母字符。 强制所有内容都使用小写会降低密码强度 如果您确实决定允许超级案例字符,您将需要对此代码进行一些非常轻微的修改
$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
$password = "Aabbccdd" ;

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

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