Php PDO阵列和阵列_唯一
我正试图用Php PDO阵列和阵列_唯一,php,pdo,Php,Pdo,我正试图用PDO从我的数据库返回课程id列表。我可以访问数据,但是,我只想返回一个唯一id的数组,即 这个 变成 1,2,3,4 我正在使用下面的代码 $sth = $dbh->prepare('SELECT courseId from training'); $sth->execute(); $row = $sth->fetchAll(); $result = array_unique($row); print
PDO
从我的数据库返回课程id列表。我可以访问数据,但是,我只想返回一个唯一id的数组,即
这个
变成
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\u unique
上阅读友好型,您可以看到:
注:当且仅当(字符串)$elem1时,两个元素被视为相等
==(字符串)$elem2。换句话说:当字符串表示形式相同时。将使用第一个元素
由于$result
包含数组,并且每个数组的字符串表示形式都相同(“Array”IIRC),因此所有元素都比较“equal”,只剩下第一个元素
如何解决这个问题:有几种方法
一种方法是让数据库通过选择DISTINCT
为您完成这项工作
另一种方法是从一个数组到一个ID数组,然后array\u unique
就可以正常工作了。只需使用foreach
循环,或(可能更好)使用array\u map
即可完成此操作,例如:
$ids = array_map(function($el) { return $el['courseId']; }, $row);
$unique = array_unique($ids);
或许您最好执行以下查询:
SELECT DISTINCT courseId FROM training
这样一来,来自数据库的数据已经是唯一的,并且不需要使用comaprison
array\u unique
它使用的是comaprisonarray\u unique
。我会在查询中使用DISTINCT
快速提示来实现这一点-当执行不需要数据绑定的查询时,只需使用query()
方法,如下所示:$sth=$dbh->query('SELECT courseId FROM training')代码>。为了提高效率,您甚至可以在同一行中使用查询结果填充变量,如下所示:$sth=$dbh->query('SELECT courseId FROM training')->fetchAll(PDO::FETCH_ASSOC)代码>。谢谢@Austinbrunkhorsthanks Alec。我会用它来代替。我只是想弄清楚我用array\u unique
做了什么错事,这样我就知道将来会怎样。见上文。。。我没有深入讨论更多细节,因为在我写下答案的最初部分后,还有另外两个部分包含相同的细节和建议:-)
SELECT DISTINCT courseId FROM training