2011-09-14 10 views
0

私はテーブルからIDを取得する関数を作成しようとしています。そして、これらのIDが別の関数で処理されるように、すべてのIDを配列に入れたいと思います。 私は以下のように書いていますが、配列メソッドではなく、IDの2度を表示しています。私はオンラインで検索し、mysql_fetch_assocを使用してそれぞれを削除することを提案しています。しかし、私の場合は、出力を得るためにzend adapter fetchAllを使用しています。どのように私はこの配列を渡すことができますし、各IDが1つずつ処理されるように、私は配列のIDを取得することができます私に教えてください..今私が持っているものは、ありがとう。PHPでmysqlを選択する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

重複については、関数が2回呼び出されていないことは絶対に確かですか?そのコードは本当に一度だけ表示する必要があります。 もう1つの可能性は、ユーザーが実際にデータベースに2度入っていることですが、 '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;の直前に置きます。最初の場所で重複している理由を調べる方がはるかに優れているため、上記の関数でコメントしました。あなたの質問へのコメントで述べたように、関数が2回呼び出されていないことを確認してください。また、重複するエントリのデータベースをチェックしてください(ただし、 'user_id'がプライマリキーの場合は不可能です)。

(それが複数の値を返すのgetId()関数を持ってしても意味がありませんので、また)(私はgetIDsに関数を名前を変更しますのでご注意ください。:))

+0

私はecho $ resultと言うと、 "array"を表示します。私は他の場所で関数の呼び出しを取り除き、単体でテストします。私は何か間違っていますか? – geej

+0

これはどのように呼び出すのですか?$ bunch_of_ids = getIDs();私はidの配列として渡すしたい場所で? – geej

+0

配列なので、配列をエコーすることはできません。内容を表示したい場合は、 "print_r($ result)"を試してください。それはあなたにその内容を示すはずです。 2番目の質問を理解しているかどうかはわかりません。必要なところで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

あなたの機能は私には正しいよう、あなたは確信していますあなたはダブル出力を説明するためにそれを2度呼んでいませんか?

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と呼ばれる。 mysql_num_rowsが大きい場合は遅くなる可能性があります。 – k102

0

私はコードは罰金だと思います。私はそこに間違いがないと思う。

関連する問題