array_rand函数有时会返回空

时间:2015-07-05 12:09:44

标签: php mysql arrays random

我想做一点服务。服务的主要思想是从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并将它们带入array.Second查询,从上一个查询的结果中获取随机id并显示相关id的整行。我被卡住了在随机函数。 如果我需要用百分比来解释这项工作,以便更清楚,

  • 效果很好并获得结果%70
  • 获取空%20
  • 获取空数组[]%10

我希望这个节目有截图,但由于我的声誉,系统没有给出许可。所以,最后的声明像往常一样,&#34;我不擅长PHP。任何想法? &#34;老实说,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:0)

来自文档

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];