PDO阵列和array_unique

Pau*_*ert 2 php pdo

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

这个

1,2,2,3,4,4
Run Code Online (Sandbox Code Playgroud)

成为

1,2,3,4
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的代码

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

但是,它仅返回1个id:

Array ( [0] => Array ( [courseId] => 8 [0] => 8 ) )
Run Code Online (Sandbox Code Playgroud)

如果我print_r $row能看到我所有的课程编号

我究竟做错了什么?

Jon*_*Jon 5

我究竟做错了什么?

您尚未阅读上的友好手册array_unique,可以在其中看到以下内容:

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

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

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

一种方法是让数据库使用SELECT DISTINCT

另一个方法是将数组从数组转换为仅id的数组,然后array_unique就可以正常工作了。这可以简单地通过foreach循环来完成,或者使用array_map,(可能更好),例如:

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