簡體   English   中英

array_rand 函數有時返回空

[英]array_rand function returns empty sometimes

我想做一個小服務。該服務的主要思想是顯示 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。知道嗎?” 老實說,任何幫助將不勝感激。

您應該等待數組在 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']

從文檔

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM