PDO arrays and array_unique


PDO arrays and array_unique

我正试图用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,我可以看到我所有课程ID的

我做错了什么?

我做错了什么?

你没有阅读array_unique上的友好手册,在那里你可以看到:

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

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

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

一种方法是让数据库用SELECT DISTINCT为您做这件事。

另一种方法是从一个数组变成一个只有id的数组,然后array_unique就可以正常工作了。这可以简单地用foreach循环来完成,或者(可能更好)用array_map来完成,例如:

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

也许您最好执行以下查询:

SELECT DISTINCT courseId FROM training

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

它是array_unique司令部正在使用的。我只想在查询中使用DISTINCT来完成此操作。