【问题标题】:array_rand function returns empty sometimesarray_rand 函数有时返回空
【发布时间】:2015-09-22 16:11:15
【问题描述】:

我想做一个小服务。该服务的主要思想是从mysql表中显示一条记录,并且每次点击都会随机显示。

这是我写的代码:

<?php
require'connection.php';

$dbQueryFirst = $nesnePDO->prepare("SELECT CategoryID FROM Categories");
$dbQueryFirst->execute();   
while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)) 
{
    $getidFirst[] = $resultsFirst;
    $puppet = array_rand($getidFirst);
    if ($puppet == null && empty($puppet)) 
    {
        shuffle($getidFirst);       
    }       
}

$rndID = $puppet;

$dbQuerySecond = $nesnePDO->prepare("SELECT * FROM Categories WHERE CategoryID = :CategoryID");
$dbQuerySecond->bindParam(":CategoryID",$rndID);
$dbQuerySecond->execute();
$resultsSecond = $dbQuerySecond->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($resultsSecond);
?>

第一个查询是,从 db 中获取 id 并将它们放入数组。第二个查询,从上一个查询的结果中获取随机 id 并显示相关 id 的整行。我被卡在了随机函数中。 如果我需要用百分比来更清楚地解释这项工作,

  • 运行良好并获得结果 %70
  • 清空 %20
  • 获取空数组[] %10

我想要显示屏幕截图,但由于我的声誉,系统没有给予许可。所以,最后的声明照常“我不太擅长 PHP。有什么想法吗?”老实说,任何帮助将不胜感激。

【问题讨论】:

  • 当只选择一个条目时,array_rand() 返回随机条目的键

标签: php mysql arrays random


【解决方案1】:

您应该等待数组填充到您的 while 循环中,然后从中获取随机值。

while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)) 
{
    $getidFirst[] = $resultsFirst;     
}

$puppet = array_rand($getidFirst);
$rndID = $getidFirst[$puppet];

此外,您可以直接从数据库中获取随机条目,而无需使用 php。

$dbQueryFirst = $nesnePDO->prepare("SELECT CategoryID FROM Categories ORDER BY RAND() LIMIT 1");
$dbQueryFirst->execute();  
$rndID = $dbQueryFirst->fetch(PDO::FETCH_ASSOC)

顺便说一句,你应该像这样得到你的 CategoryID

$rndID['CategoryID']

【讨论】:

  • 你写的代码块返回false.Absolute。关于sql查询的第二个建议,还没试过。因为我用谷歌搜索它的性能不如你预期的那么好。但我试试看。
  • 猫你写var_dump($rndID)的结果?
  • 第一个块与@splash58 的相同。对于第二部分,回显 $rndID['CategoryID'] 不起作用。
  • 那么 var_dump($getidFirst) 呢?你真的应该检查你的数据库表。
  • 好吧,我明白了。旧表没有空格,但我不能相信它。我删除了表并添加了一个新表。我添加了新记录。不知何故它工作.你的两个答案都很有帮助。谢谢
【解决方案2】:

来自文档

When picking only one entry, array_rand() returns the key for a random entry

第二,$resultsFirst,我认为,是你需要的数组$resultsFirst['CategoryID']

所以,使用

while ($resultsFirst = $dbQueryFirst->fetch(PDO::FETCH_ASSOC))  {
    $getidFirst[] = $resultsFirst['CategoryID'];
}

$puppet = array_rand($getidFirst);
$rndID = $getidFirst[$puppet];

【讨论】:

  • 我试过了,但有时仍然返回空值。这只是增加了我在问题中解释的百分比:)
  • 如果添加 echo $rndID;在我的代码之后,您每次都应该使用任何 catid。请测试一下,是这样的
  • 对不起,我写了,但我实际上是在错误的代码块中制作的。是的,它返回但一些 id 为空。为什么会这样?
  • 只有当数组包含空值时才可能。你很容易可以测试这个。如果是这样,请查看您的数据库
  • 好吧,我明白了。旧表没有空格,但我不能相信它。我删除了表并添加了一个新表。我添加了新记录。不知何故它工作.你的两个答案都很有帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
相关资源
最近更新 更多