2017-10-21 146 views
0

我一直試圖設置一個while循環來將用戶有20天的所有ID添加到數組中。目前,它顯示未定義的偏移量的錯誤。我該如何編碼代碼,以便它首先在lastSeen列中獲得20天的第一行的id,然後,第二行,然後將它們添加到數組中?通過循環將MySql數據庫中的值添加到數組中

$get_email = mysqli_query($con, "SELECT id FROM users WHERE lastSeen='20'"); 
$email = mysqli_fetch_array($get_email); 
$num_days = mysqli_num_rows($get_email); 
$i = 1; 
$array_id = array(); 
while($i <= $num_days){ 
array_push($array_id, $email[$i]); 
$i = $i + 1; 
} 
+0

['mysqli_fetch_array()'](http://php.net /manual/en/mysqli-result.fetch-array.php)不會按照您的想法返回所有結果集。該文檔說:*「取結果行...」*。這意味着你必須在循環中一遍又一遍地調用它來獲取所有行。 – axiac

+0

@axiac我可以用什麼替換它來獲得預期的結果。 – apaul

回答

1

首先,你的代碼很混亂。您從數據庫中獲取ID,但變量的名稱會告訴「電子郵件」。儘量保持一致,當你再次閱讀這些代碼時,它會幫助你。

由於您不使用從數據庫中獲得的值進行任何處理,因此可以使用mysqli_fetch_all()。它一次返回數組中的記錄集中的所有行。通過MYSQLI_ASSOC作爲其第二個參數告訴它使用列名稱(來自查詢的SELECT子句)作爲它從結果集的每一行創建的數組中的鍵。

接着,PHP函數僅array_column()提取到含有完全符合需要的值的新陣列id列的值:

$result = mysqli_query($con, "SELECT id FROM users WHERE lastSeen='20'"); 
// Get all the rows, indexed by column names 
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC); 
// Get only the 'id' column 
$ids = array_column($rows, 'id'); 
相關問題