Arrays 如何填充数组,然后对数组进行排序或随机化?

Arrays 如何填充数组,然后对数组进行排序或随机化?,arrays,coldfusion,Arrays,Coldfusion,我正在使用ColdFusion 9.1。我正在使用CFSCRIPT进行编码 我正在做一个测验。查询一将获得一个人的图像和图像中的人的图像。这将是正确的答案。查询二将得到另外两个不在图像中的人。我想把它放在一个数组中,然后对数组进行排序,以便正确的答案不总是在顶部或底部或中间。 以下是我的伪SQL: QUERY ONE NAME = GET CORRECT ANSWER SELECT TOP 1 ImageID, PersonID, FirstName, LastName FROM IMAGES

我正在使用ColdFusion 9.1。我正在使用CFSCRIPT进行编码

我正在做一个测验。查询一将获得一个人的图像和图像中的人的图像。这将是正确的答案。查询二将得到另外两个不在图像中的人。我想把它放在一个数组中,然后对数组进行排序,以便正确的答案不总是在顶部或底部或中间。

以下是我的伪SQL:

QUERY ONE NAME = GET CORRECT ANSWER
SELECT TOP 1 ImageID, PersonID, FirstName, LastName
FROM IMAGES

QUERY TWO NAME =  GET TWO INCORRECT ANSWERS
SELECT TOP 2 PersonID, FirstName, LastName
FROM IMAGES 
WHERE ImageID IS NOT THE CORRECT ANSWER
我“认为”我希望我的数组如下所示:

PersonID="1234";
FirstName="Bob";
LastName="Jones";
我需要遍历每个查询,并用查询返回的三个人填充这个数组。像这样,但是这个代码不起作用:

<cfscript>
PersonArray = arrayNew(1);
for (i = 1; i lte GetTwoWrong.RecordCount; i++) {
    Person = structNew();
    Person.PersonID = GetTwoWrong.PersonID[i];
Person.FirstName = GetTwoWrong.FirstName[i];
Person.LastName = GetTwoWrong.LastName [i];
PersonArray = arrayAppend(PersonArray , Person);

}
</cfscript>

PersonArray=arrayNew(1);
对于(i=1;i lte GettWoError.RecordCount;i++){
Person=structNew();
Person.PersonID=gettworhour.PersonID[i];
Person.FirstName=getwoError.FirstName[i];
Person.LastName=gettworhorror.LastName[i];
PersonArray=arrayAppend(PersonArray,Person);
}
然后我需要按FirstName、LastName或PersonID对数组进行排序,以创建任意类型的随机性

<cfscript>
PersonArray = arraySort(PersonArray numeric);
</cfscript>

PersonArray=arraySort(PersonArray数字);
然后我需要输出答案。答案可以点击。单击后,我将通过jQuery发送PersonID以检查答案的正确性(并存储选择)


那么,我如何创建一个数组,然后从两个不同的查询中填充它,然后对它进行排序呢?我应该使用数组吗?结构?

我会在数据库中执行此操作,这样就不那么复杂了。下面是一个例子:

SELECT * FROM (
    SELECT TOP 1 1 AS Correct, ImageID, PersonID, FirstName, LastName, UniqueToCorrectAnswer
    FROM IMAGES
    UNION ALL
    SELECT TOP 2 0 AS Correct, ImageID, PersonID, FirstName, LastName, NULL AS UniqueToCorrectAnswer
    FROM IMAGES 
    WHERE ImageID IS NOT THE CORRECT ANSWER
) AllAnswers
ORDER BY NewID()
对于不同的数据库、表和条件,
UNION
两侧的两个查询可以完全不同,只要它们都返回相同的列。您会注意到,在第二个查询中,我返回了一个空值,表示在第一个查询中不存在但确实存在的内容(只是一个示例)。因此,您可以看到如何从
联合的每一侧返回不同的值,并以完全随机的顺序获取它们

这是数据库服务器比应用程序代码更擅长的事情。如果您需要(在页面的某个地方)以不同的方式处理正确答案和错误答案,那么您可以使用查询查询从基本查询中提取正确或错误答案。

如果您真的想排序并使用随机数组,像往常一样,Ben Nadel已经为我们完成了所有工作:

然后,您需要更改原始代码,以便在出现的
阵列中使用
replicate
函数来防止引用问题。因此,改变这一点:

PersonArray = arrayAppend(PersonArray , Person);
为此:

arrayAppend(PersonArray , Duplicate(Person));
还返回一个
true
false
值,因此将结果分配回数组将清除其中已有的信息。我总是将其与
ListAppend
混淆,后者确实返回修改后的列表

PersonArray = arrayNew(1);

Person = structNew();
Person.PersonID = GetOneRight.PersonID;
Person.FirstName = GetOneRight.FirstName;
Person.LastName = GetOneRight.LastName;

ArrayAppend(PersonArray , Duplicate(Person));

for (i = 1; i lte GetTwoWrong.RecordCount; i++) {
    Person = structNew();
    Person.PersonID = GetTwoWrong.PersonID[i];
    Person.FirstName = GetTwoWrong.FirstName[i];
    Person.LastName = GetTwoWrong.LastName[i];
    ArrayAppend(PersonArray , Duplicate(Person));

}

//Now shuffle it using Ben's code
CreateObject("java", "java.util.Collections").Shuffle(PersonArray);

你在使用什么数据库?您可以
UNION
这两个查询,然后(在SQL server中)按
NewID()
排序。Dan,我需要单独的查询。我将添加其他条件来收集关于每个正确答案和错误答案的信息。如果两个结果集返回相同的信息,那么您实际上不需要单独的查询:)。我将发布一个我的意思的示例作为答案。还有一个查询,您可以使用它,根据您想要的列进行联合和排序/排序。因此,您的建议是在查询中完成所有操作,然后将其转储到页面上,根本不需要数组?事实上,这不是我想要的,但已经开始有了很多意义。让我试一试,看看能否让查询正常工作……请继续关注。没错,然后像平常一样循环查询。没有凌乱的数组,一个到数据库的单一连接,等等。它解决了你的问题:)Dan,问题是:我有一个图像表、一个人员表和一个连接表。所以,我想从图像中提取一个人,然后是其他可能有图像或没有图像的人。这就是为什么我首先得到了图像,然后是与该图像相关联的人,然后是另外两个人。然后只是将事情正确地连接起来,使返回值中的列匹配,然后将两者结合起来。通过正确的查询,这是完全可行的。也许如果你想走这条路,你可以创建一个单独的问题来解决这种特殊的解决方案,我们可以在那里讨论。需要更多关于你的表格结构的信息来帮助我。丹,你的整个回答不符合我的需要。你用“ORDER BY NewID()”让我找到了正确的答案。谢谢!我同意你使用数据库来处理这个问题:)但是当你真的需要随机化数组的时候,这是一个很好的提示。我相信你可以让数据库来处理这个特定的问题,但问题是,我向你提出这个问题的方式似乎是唯一的问题。我将有没有人的照片,一个人,多人。我需要能够轻松地从多个地方拉车。所有表中的所有数据都不相同。但也会有共同点。我最初的问题仍然是如何创建一个数组并从两个不同的查询中填充它?有什么帮助吗?您刚才回答的这个问题有一个链接可以对数组进行随机排序,并更正了生成该数组时出现的两个问题。至于从两个查询填充数组,只需逐个循环每个查询,并根据需要显示
arrayapend
。你把所有的东西都放在这里了。如果在使用上述建议后,事情仍然不起作用,发布正在发生的事情与您预期的事情(您原来的帖子没有错误,只是说“不起作用”)。改变你的数组外观并使用Ben的数组排序应该对你有帮助