2016-03-16 78 views
0

我是一個PHP的noob,我很難找出一些看起來應該很簡單的東西。我的主要目標是獲得在「數字」列中找到的所有數字,然後列出數字01-20,只要它們不顯示在數據庫中。如何從單個列中的所有行中獲取數據?

這是我到目前爲止有:

$select = mysqli_query($connect, "SELECT * FROM `memfav`"); 
while($row=mysqli_fetch_assoc($select)) { 
    $number = $row['number']; 
} 
for($i=1; $i<=20; $i++) { 
    if($i<>$number) { 
     if($i<10) { 
      echo "<option value=\"$i\">0$i</option>"; 
     } 
     else{ 
      echo "<option value=\"$i\">$i</option>"; 
     } 

    } 
} 

然而,這只是沒有顯示最新的條目。我完全錯過了什麼嗎?

ETA:對於任何正在尋找類似東西的人,我終於想出了實現這個目標的方法! (從別人的幫助)

$select = mysqli_query($connect, "SELECT `number` FROM `memfav`"); 
while($row = mysqli_fetch_assoc($select)) { 
$numbers[] = $row['number']; 
} 
for($i=1; $i<=20; $i++) { 
if(!in_array($i, $numbers)) { 
    echo '<option value="$i">' . str_pad($i, 2, '0', STR_PAD_LEFT) . '</option>'; 
} 
} 
+1

你的意思是,如果像14,15號是有數據庫,則該選項是應表現出1-13和16-20?這條路? –

+0

是的,這就是我想要達到的目標 –

+0

迄今爲止,沒有一個建議的解決方案已經工作...... –

回答

2

你已經把你的比較邏輯的while循環之外;正如所寫,您的代碼循環訪問您的mysql結果,並將$number設置爲每行的新值。此循環完成後,將$number與返回的最後一行的值相等。然後檢查值爲1-20的最終值$number。要解決此問題,請將比較邏輯放在while循環中。

+0

我做到了,我得到的是兩個單獨的列表(1-20),第一個不顯示「1」,第二個不顯示「2」。我希望他們都在同一個列表中。 –

-1
$select = mysqli_query($connect, "SELECT * FROM `memfav`"); 
while($row=mysqli_fetch_assoc($select)) { 
    $number = $row['number']; 
    for($i=1; $i<=20; $i++) { 
     if($i<>$number) { 
     if($i<10) { 
      echo "<option value=\"$i\">0$i</option>"; 
     } 
     else{ 
      echo "<option value=\"$i\">$i</option>"; 
     } 

     } 
    } 
} 
0

試試這個:

$numbers = array(); 
for ($i = 1; $i <= 20; $i++) { 
    if ($i < 10) { 
     $numbers[] = "0{$i}"; 
    } else { 
     $numbers[] = "{$i}"; 
    } 
} 

$select = mysqli_query($connect, "SELECT * FROM memfav"); 
$usedNumbers = array(); 
while ($row = mysqli_fetch_assoc($select)) { 
    $usedNumbers[] = $row['number']; 
} 

$diff = array_diff($numbers, $usedNumbers); 

foreach ($diff as $key => $value) { 
    echo "<option value=\"{$value}\">{$value}</option>"; 
} 
相關問題