如何在php中测试数组的索引是否与数组的另一个索引相等


How to test the index of an array for equality with another index of an array in php?

我想测试一个数组的特定索引是否等于另一个数组中的另一个特定索引,但即使两个索引相等,它也总是错误的。

<!DOCTYPE html>
<html>
<head><title>PHP Written Test</title></head>
<body>
<?php include 'variables.php';?>
<?php include 'functions.php';?>
<?php
session_start();
$x = 1;
$y = 0;
while ($x <= 20)
{   
    $a = $_POST["question" . $x];
    $b = $_SESSION['correct'][$y];
    if ($a == $b)
    {
        echo "The answer was correct " . "<br><br>";
    }
    else
    {
        echo "The answer was wrong<br><br>";
    }
    echo "The user answer is: " . $a . "<br>";
    echo "The correct answer is: " . $b  . "<br><br>";
    $x++;
    $y++;
}
?>
</body>
</html> 

它的输出总是错误的,我不明白为什么不起作用

The answer was wrong
The user answer is: Software programs that can compose, send, and receive email messages
The correct answer is: A service that allows users to send messages and/or documents to each other over an internet network
The answer was wrong
The user answer is: Click the refresh button
The correct answer is: Click the refresh button
The answer was wrong
The user answer is: A copy of the email sent to the recipient emailed to you
The correct answer is: A copy of the email sent to the recipient emailed to you
The answer was wrong
The user answer is: Software enabling the user to organize emails
The correct answer is: A tool used to lookup information on the internet
The answer was wrong
The user answer is: A location that stores saved files and programs
The correct answer is: A location that stores saved files and programs
The answer was wrong
The user answer is: A program that lets your organize data into databases
The correct answer is: A utility program used for managing processes and programs running on the computer
The answer was wrong
The user answer is: A program that infects a computer, copies itself many times using up system resources, and spreads the infection to other computers
The correct answer is: An important part of systems files. It manages the interaction between the user, application programs, and hardware
The answer was wrong
The user answer is: GPU
The correct answer is: CPU
The answer was wrong
The user answer is: Icons
The correct answer is: Icons
The answer was wrong
The user answer is: Composing a new email message and sending it
The correct answer is: Impersonating someone with a similar email address and trying to obtain sensitive information from the recipient
The answer was wrong
The user answer is: Menu Bar
The correct answer is: Address Bar
The answer was wrong
The user answer is: The home page
The correct answer is: The home page
The answer was wrong
The user answer is: Motherboard
The correct answer is: Keyboard
The answer was wrong
The user answer is: Programs that intend to damage a users data and system files or allow an outside attacker to gain access to the computer and steal data
The correct answer is: Programs that intend to damage a users data and system files or allow an outside attacker to gain access to the computer and steal data
The answer was wrong
The user answer is: The message itself
The correct answer is: The 'To' line
The answer was wrong
The user answer is: Desktop
The correct answer is: Computer
The answer was wrong
The user answer is: Internet Explorer
The correct answer is: Internet Explorer
The answer was wrong
The user answer is: User ID, @ symbol, host name
The correct answer is: User ID, @ symbol, host name
The answer was wrong
The user answer is: Explorer
The correct answer is: Explorer
The answer was wrong
The user answer is: Shortcut
The correct answer is: Taskbar

我按照Sean的建议做了,并使用了if(trim($a)==trim($b))它解决了我的问题。

但即使两个索引的相等,它也总是错误的

然后这两个索引不相等,要么是因为它们不同,要么是脚本错误(即没有正确检查某些内容)。

如果PHP声明某个东西是FALSE,那么它就是FALSE,即使由于PHP的工作方式(例如==和===之间的差异),它对您来说是模糊或未知的。

我不能给你直接的答案,因为我看不到你的会话保存的原始数据,但为了帮助你解决问题(这个和未来的脚本):

我从你的例子中看到:

用户的回答是:单击刷新按钮
正确答案是:点击刷新按钮

它们看起来是一样的,但PHP并没有将它们解释为一样的
一个数据来自DB,另一个来自用户输入吗?例如,它们是相同的吗?

检查源代码并将两者进行比较。突出显示文本,某个地方可能有一个胭脂空白。

var_dump()您的会话并比较数据。

在循环中手动设置$a$b(而不是会话等)为同一字符串(即它们匹配),然后查看是否为TRUE,即20"答案为TRUE"。

如果是这样,那么您的脚本、循环和If一直工作到会话数据的点
然后仔细检查会话数据
检查源代码并再次比较两者。

回显所有内容,检查PHP实际拥有的数据,而不是它最终在屏幕上输出的数据,永远不要检查认为它拥有的数据。

有一些不同的东西,你只需要找到它。