PDO数组和array_unique

时间:2012-03-15 20:57:10

标签: php pdo

我正在尝试使用PDO从我的数据库返回课程ID列表。我可以访问数据,但是,我只想返回一个唯一id的数组,即

1,2,2,3,4,4

变为

1,2,3,4

我正在使用以下代码

$sth = $dbh->prepare('SELECT courseId from training');  
    $sth->execute();  
        $row = $sth->fetchAll();
        $result = array_unique($row);
        print_r($result); 

但是,它只返回1个id:

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

如果我print_r $row我可以看到我的所有课程

我做错了什么?

3 个答案:

答案 0 :(得分:4)

  

我做错了什么?

您没有在array_unique上阅读友情manual,您可以在这里看到:

  

注意:当且仅当(字符串)$ elem1时,两个元素被认为是相等的   ===(字符串)$ elem2。用文字表示:当字符串表示相同时。将使用第一个元素。

由于$result包含数组,并且每个数组的字符串表示相同(“数组”IIRC),因此所有元素都比较“相等”,只留下第一个。

如何解决问题:有几种方法。

一种方法是让数据库通过SELECT DISTINCT为您完成。

另一个是从一个数组数组到一个只有id的数组,然后array_unique将正常工作。这可以通过foreach循环完成,或者(可能更好)与array_map完成,例如:

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

答案 1 :(得分:4)

也许你会通过这个查询更好:

SELECT DISTINCT courseId FROM training

这样来自数据库的数据已经是唯一的,无需使用array_unique

答案 2 :(得分:0)

这是array_unique正在使用的比较。我会在查询中使用DISTINCT

执行此操作