Что я делаю не так?
Вы не читаете дружественное руководство на 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);