Массивы PDO и array_unique - PullRequest
       1

Массивы PDO и array_unique

2 голосов
/ 16 марта 2012

Я пытаюсь вернуть список идентификаторов курса из моей базы данных с PDO.Я могу получить доступ к данным, однако я хочу только вернуть массив уникальных идентификаторов, т.е.

Это

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 идентификатор:

Array ( [0] => Array ( [courseId] => 8 [0] => 8 ) )

Если я print_r $row, я могу видеть все свои ID курса

Что такоеЯ делаю не так?

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

Что я делаю не так?

Вы не читаете дружественное руководство на array_unique, где вы можете увидеть это:

Примечание. Два элемента считаются равными тогда и только тогда, когда (строка) $ elem1 === (строка) $ elem2.На словах: когда строковое представление одинаково.Будет использоваться первый элемент.

Так как $result содержит массивы, и строковое представление каждого из них одинаково ("Array" IIRC), тогда все элементы сравнивают "равные" и толькопервое осталось.

Как решить проблему: Несколько способов.

Можно было бы позволить базе данных сделать это за вас с помощью SELECT DISTINCT.

Другой вариант - перейти от массива массивов к массиву просто идентификаторов, и тогда array_unique будет работать просто отлично.Это можно сделать просто с помощью цикла foreach или (возможно, лучше) с помощью array_map, например:

$ids = array_map(function($el) { return $el['courseId']; }, $row);
$unique = array_unique($ids);
4 голосов
/ 16 марта 2012

Возможно, вам будет лучше выполнить этот запрос:

SELECT DISTINCT courseId FROM training

Таким образом, данные, поступающие из базы данных, уже уникальны, и нет необходимости использовать array_unique.

0 голосов
/ 16 марта 2012

Это комапрайон, которым пользуется array_unique. Я бы просто сделал это в запросе, используя DISTINCT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...