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