2012-03-15 11 views
1

PDOで私のデータベースからコースIDのリストを返そうとしています。私はしかし、私は唯一のPDOアレイとarray_unique

つまりユニークIDの配列を返すようにしたい、データにアクセスすることができます。この

1,2,2,3,4,4 

は私が

$sth = $dbh->prepare('SELECT courseId from training'); 
    $sth->execute(); 
     $row = $sth->fetchAll(); 
     $result = array_unique($row); 
     print_r($result); 
次のコードを使用してい

1,2,3,4 

になります

しかし、それは1だけを返しますid:

Array ([0] => Array ([courseId] => 8 [0] => 8)) 

I print_r$rowもし私が間違っているすべての私のcourseIdの

何をやっている見ることができますか?

+0

クイックヒント - データバインディングを必要としないクエリを実行する場合、 '$ sth = $ dbh-> query( 'SELECT courseId FROM training');'のように 'query()'メソッドを使用してください。 $ sth = $ dbh-> query( 'SELECT courseId FROM training') - > fetchAll(PDO :: FETCH_ASSOC)のように、同じ行にクエリの結果を変数に代入することもできます。 ); '。 –

+0

ありがとう@AustinBrunkhorst –

答えて

4

おそらく、このクエリを実行して、したほうが良いでしょう:

SELECT DISTINCT courseId FROM training 

データが来てその方法データベースからは既にユニークであり、array_uniqueを使用する必要はありません。

+0

ありがとうございます。私は代わりにそれを使用します。私は 'array_unique'で間違っていることを理解しようとしているので、私は将来について知っています。 –

4

私は間違っていますか?

注:2つの要素のみの場合(文字列)$ elem1 ===もし等しいと考えられている(文字列あなたはこれを見ることができarray_unique、上の友好manualを読んでいない

)$ elem2。言葉では:文字列表現が同じ場合。最初の要素が使用されます。 $resultので

は配列を含み、それらのそれぞれの文字列表現は、すべての要素が「等しい」の比較のみ最初が残っている(「アレイ」IIRC)と同じです。

問題を解決する方法:いくつかの方法。

SELECT DISTINCTを使用してデータベースがあなたにそれをさせることになります。

もう1つは、配列の配列からidsの配列に移動することです。次にarray_uniqueはうまく動作します。これは、単に例えば、array_mapで(おそらくより良い)foreachループで行う、またはすることができます。

$ids = array_map(function($el) { return $el['courseId']; }, $row); 
$unique = array_unique($ids); 
0

comaprison array_uniqueが使用されています。私はちょうどDISTINCTを使用してクエリでこれを行うでしょう。

+0

「それは比較だ....」どう? – Wiseguy

+0

上記の[Jon's Post](http://stackoverflow.com/a/9728089/215966)を参照してください...私は私の答えの最初の部分を書いた後、同じ詳細を含む2つの他のものがあり、お勧め:-) – prodigitalson