Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO阵列和阵列_唯一_Php_Pdo - Fatal编程技术网

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

它使用的是comaprison
array\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