我正在尝试使用从数据库返回课程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能看到我所有的课程编号
我究竟做错了什么?
我究竟做错了什么?
您尚未阅读上的友好手册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)