уникальный массив — php: array_unique отсутствует дубликат

Я боролся с незначительной проблемой с array_unique в течение пары дней.

Каким-то образом выход всегда оставляет последний дубликат в массиве.

Я получаю текст из текстового поля в виде HTML

$IDs = trim($_POST['IDs']);
$IDs = explode("\n", $IDs);
$IDs = array_filter($IDs, 'trim');
$ID = array_unique($IDs,0);
print_r($ID);

образец ввода:

012345
0123456
01234567
012345
0123456
01234567
012345
0123456
01234567

образец вывода:

Array ( [0] => 012345 [1] => 0123456 [2] => 01234567 [3] => 01234567 )

образец ввода:

012345
0123456
01234567
012345
0123456
01234567
012345
0123456

образец вывода:

Array ( [0] => 012345 [1] => 0123456 [2] => 01234567 [3] => 0123456 )

не уверен, почему последний дубликат продолжает пропускаться.

Я уверен, что что-то упустил, но не могу понять это.

Добавил цикл foreach, надеясь это исправить, но даже при этом я продолжаю получать один и тот же результат.

0

Решение

Вы должны использовать array_map вместо array_filter,

Подобно:

$IDs = trim($_POST['IDs']);
$IDs = explode("\n", $IDs);
$IDs = array_map('trim', $IDs);
$ID = array_unique($IDs,0);
print_r($ID);
1

Другие решения

Я исправил ваш формат данных и foreach() не нужно: —

<?php

$IDs = "012345\n0123456\n01234567\n012345\n0123456\n01234567\n012345\n0123456\n01234567";

$IDs = explode("\n", $IDs);
$IDs = array_unique($IDs,0);

print_r($IDs);

?>

и вывод будет:

Array
(
[0] => 012345
[1] => 0123456
[2] => 01234567
)

Постскриптум Я понял, что также array_filter было ненужным.

-1

По вопросам рекламы [email protected]