2013-07-31 48 views
0

我試圖在PHP中創建一個while循環,它從數據庫中檢索數據並將其放入數組中。這個while循環只能工作,直到數組的填充值包含某個值。while循環從數據庫中收集數據,直到數組包含一定的值

有沒有辦法在循環仍然繁忙的時候掃描數組並查找值?

說穿了;

$array = array(); 
$sql = mysql_query("SELECT * FROM table"); 

while($row = mysql_fetch_array($sql)){ 

    //Do stuff 

    //add it to the array 

    while($array !=) //<-- I need to check the array here 
} 
+1

那豈不是更好地限制哪些查詢將返回即SELECT * FROM表,其中x = 10或x = 12 – jeff

+1

僅供參考mysql_ *功能已被棄用..使用mysqli_ *或PDO – Joel

回答

1

可以使用in_array功能和break語句來檢查,如果值是數組,然後停止循環。

+0

這工作,謝謝! (我會在幾分鐘內接受它) – Resitive

+0

@Resitive:我希望你也讀過我的回答,因爲將'in_array'應用於'$ array'由於多種原因沒有意義 –

+0

@Resitive He's對,而不是檢查數組,最好檢查當前數據行。 –

2

首先,我認爲用來檢查這個數組會更容易,而不是檢查數組本身。隨着填充數組的增長,搜索將需要更長和更長的時間。 insted的考慮:

$array = array_merge($array, $row); 
if (in_array('ThisisWhatIneed', $row) 
{ 
    break;//leaves the while-loop 
} 

但是,如果你的查詢返回更多的數據,考慮更改它返回你需要什麼,僅處理需要處理的數據,否則,你還不如與代碼,它像最後:

$stmt = $db->query('SELECT * FROM tbl'); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
    if ($row['dataField'] === 'username') 
    { 
     $user = $row; 
     break; 
    } 
} 

WHERE可以幫助很多在這裏,你不覺得嗎?同時利用MySQL特有的SELECT語法,如SELECT fields, you, need FROM table,這更有效。
您可能還注意到上面的代碼使用PDO,而不是mysql_*。爲什麼?只是因爲mysql_*擴展名已棄用並且不應該再使用
Read what the red-warning-boxes tell you在每個mysql *頁面上。他們不只是在那裏添加一些顏色,而且讓生活更加活躍。他們是真正的靈魂。

1

爲什麼不在插入數組時檢查每個值?每次要檢查時,它比迭代整個數組效率更高效。

$array = array(); 
$stopValue = ... 
$sql = mysql_query("SELECT * FROM table"); 

while($row = mysql_fetch_assoc($sql)){ 


    array_push($array,$row['column']); 
    if($row['column'] == $stopValue){ 
      // The array now contains the stop value 
      break; 

} 
+0

'mysql_fetch_array'!='mysql_fetch_assoc',所以'$ row ['column']'不起作用 –

+0

剛剛指出在這些編輯中的一個遺漏,在有人爲你做了DV之前) –