2011-09-14 81 views
0

我想寫一個函數,我會從表中得到的ID,然後我想要在數組中的所有ID,以便這些ID用於另一個功能進行處理。 我寫了下面的內容,但它不是數組方法,它也打印了兩次id。我在網上搜索,他們都建議使用mysql_fetch_assoc並刪除每個..但在我的情況下,我使用zend適配器fetchAll來獲得輸出。請讓我知道我如何才能在數組中獲得id,並且只有一次,以便我可以傳遞這個數組,並且每個id都被逐一處理。現在我所擁有的只是在第一個處理完之後停止。謝謝。mysql選擇查詢與PHP foreach

function getID() 
    { 
    $sql = 'SELECT user_id FROM users WHERE ready = "1" '; 
    $idList = $this->getAdapter()->fetchAll($sql); 
    if(!empty($idList)) { 
     foreach($idList as $value) { 
      echo $value['user_id']."\n"; 
     } 
    } 
    } 


Output 
201 
223 
231 
334 
201 
223 
231 
334 
+0

關於重複,你是否完全確定函數沒有被調用兩次?該代碼真的應該只顯示一次。 另一個遙遠的可能性是用戶真的是數據庫中的兩倍,但如果'user_id'是主鍵,那麼這並沒有什麼意義。 – Teekin

+0

嗨,謝謝,我曾在其他地方打過電話,但我認爲這會給我的ID,我可以處理..,我現在刪除它,再次測試功能,現在它只顯示一次.. – geej

回答

1

試試這個。

function getIDs() { 
    $result = array(); 
    $sql = 'SELECT user_id FROM users WHERE ready = "1" '; 
    $idList = $this->getAdapter()->fetchAll($sql); 
    if(!empty($idList)) { 
    foreach($idList as $value) { 
     echo $value['user_id']."\n"; 
     array_push(result, $value['user_id']); 
    } 
    } 
    // $result = array_unique($result); 
    return $result; 
} 

你會再拿到由數組:

$bunch_of_ids = getIDs();

你應該弄清楚他們爲什麼要被複制,但如果你不能,你可以用獨特的數組內容:

$result = array_unique($result);

把那個放在return $result;之前的那個函數裏面。我在上面的函數中對它進行了評論,因爲要找出爲什麼它首先被複制會更好。正如我在對您的問題的評論中指出的那樣,請確保該函數未被調用兩次。同時檢查數據庫是否有重複的條目(儘管如果'user_id'是主鍵,這應該是不可能的)。

(另請注意,我改名功能getIDs(),因爲它是沒有意義的有一個的getID()函數返回多個值。:))

+0

當我說echo $結果,它顯示「數組」..我刪除了在其他地方的函數調用,只是單獨測試它。我在做什麼錯? – geej

+0

我怎麼稱呼它?$ bunch_of_ids = getIDs();在我想通過ID作爲數組的地方? – geej

+0

這是很正常的,你不能回顯數組,因爲它是一個數組。如果您想顯示內容,請嘗試「print_r($ result)」。這應該顯示你的內容。 我不確定我是否理解第二個問題......您只是在需要的地方使用getIDs()。無論是叫$ bunch_of_ids還是其他什麼都不重要。我不知道你想要使用getIDs()的代碼 - 我甚至不知道你爲什麼需要它。 :) – Teekin

0

這個功能是正確的,但如果你想要一個數組:

if(!empty($idList)) { 
    foreach($idList as $value) { 
     $array[] = $value['user_id']; 
    } 

如果'user_id'真的重複:

$array = array_unique($array); 
0

你的函數看起來正確的給我,你確定你不是說過兩次來解釋雙重輸出嗎?

0
<?php 
function getID(){ 
$get = mysql_query("SELECT user_id FROM users WHERE ready = '1'", $yhteys); 

    for ($i = 0; $i < mysql_num_rows($get); $i++) { 
    $id = mysql_result($get, $i, "user_id"); 
    $userids[] = $id; 
    } 
return $userids; 
} 
?> 
+0

'mysql_num_rows'是呼籲evry for循環。它可以很慢,如果mysql_num_rows是大 – k102

0

我認爲代碼是罰款。那裏我沒有看到任何錯誤。