代码在比较字符串方面存在问题

时间:2015-03-02 21:56:52

标签: php

我遇到的问题是,当我编辑字符串“dbPassword”时,我的脚本会运行正常,因为2字符串不匹配。例如,如果我删除字母“c”

d

array(1) { ["c"]=> int(6) } not matching.. 
123bdcbadbcabcbcadcbadbc
123bcdbddbcabcccbdaabba

但是当我对$anPassword字符串做同样的事情时,它基本上给了我一条好消息。 相反,它只会导致问题 空白处是我拿出一封信的地方。 (字母B)

$anPassword = "123bdcbad cabcbcadcbadbc"; //Removed 1 letter
$dbPassword = "123bdcbadbcabcbcadcbadbc"; //Unchanged / original string

它仍然给了我..

应该匹配...理论上...... 123bdcbadcabcbcadcbadbc 123abadabccbbbddcbacdcbc

基本上,为什么我的代码会出现错误并返回它显然不是匹配的。为什么只有一些角色会导致它。

$anPassword = "123bdcbadbcabcbcadcbadbc"; //User encrypted password on form submission
$dbPassword = "123bdcbadbcabcbcadcbadbc"; //Database encrypted password.

$begChars1[0] = substr($anPassword, 0, 3);
$begChars1[1] = substr($anPassword, 3);

$begChars2[0] = substr($dbPassword, 0, 3);
$begChars2[1] = substr($dbPassword, 3);
$begChars2[2] = str_shuffle($begChars2[1]);

$compData1 = array_count_values(str_split($begChars1[1]));
$compData2 = array_count_values(str_split($begChars2[2]));
$result = array_diff($compData1, $compData2);

if($begChars1[0] != $begChars2[0]) {
    echo "not matching...";

}

if($result == null) {
    echo "Should be matching... Theoredically...";
} else {
    echo "not matching.. " . var_dump($result);
}

echo "<br />" . $begChars1[0] . $begChars1[1] . "<br />" . $begChars2[0] . $begChars2[2];

1 个答案:

答案 0 :(得分:2)

我不明白你想要完成的是什么,但这就是我所看到的。

你的大部分困惑都源于这条线。

$result = array_diff($compData1, $compData2);

您认为这将返回有关这两个数组的所有差异。这实际上做的是返回array1中不存在于array2中的值。

在比较之前,你的阵列都是这样的。

array (size=4)
  'b' => int 7
  'd' => int 4
  'c' => int 6
  'a' => int 4

array (size=4)
  'a' => int 4
  'c' => int 6
  'd' => int 4
  'b' => int 7

两个字符串都包含相同数量的每个字符,你只是因为某些原因而改变它们。 array_diff是可以理解的,什么都不会返回,因为对于数组而言,这些元素的顺序并没有什么不同。

如果您在第二个字符串中删除了'x',则会在$result中看到某些内容。

你可以通过你想要发明的任何疯狂方法来存储密码,从而节省很多麻烦。 Hash them like everyone else instead.