Есть массив $data = array(). В него записываются данные array_push($data, data).
Т.к. data может повторяться, создаётся новый массив с уникальными data.
$uniq_data = array_unique($data);
После чего я хочу вывести этот массив. Делаю я это так :
for($i=0; $i<count($uniq_data); $i++){
}
Выводит только первые 2 элемента массива. После вывода массива через print_r($uniq_data); вижу что ключи элементов не идут по порядку (0,1,2,3...), видимо ключи копируются из прошлого массива(0,4,28,392...).
Я не понимаю как это работает. По идее оно должно вывести все элементы, но выводит только те, где ключ элемента массива меньше числа count($uniq_data). Почему так? И как мне вывести все элементы?
Самое простое после array_unique для сортировки ключей с нуля:
$array = array_values($array);
array_values() возвращает массив со всеми элементами массива array. Она также заново индексирует возвращаемый массив числовыми индексами. https://www.php.net/manual/ru/function.array-values.php
Функция array_unique() удаляет повторяющиеся элементы, но не сбрасывает их индексы. Соответственно, если у вас 4 элемента в массиве, но их индексы равны, например: 0, 4, 28, 392, то в цикле for выведется только первый элемент.
Чтобы вывести все элементы воспользуйтесь циклом перебора массива foreach:
foreach ($uniq_data as $key => $data) {
//..
}
Подробная информация в документации