Мне не нравится идея повторных вызовов in_array()
, поскольку она может немного перетаскивать большие массивы.
Теперь мои методы, вероятно, не будут устанавливать какие-либо рекорды скорости(Я не удосужился протестировать), но я подумал, что опубликую пару неортодоксальных подходов на случай, если они могут вдохновить будущих читателей.
Метод № 1:
- преобразоватьмногомерный массив в строку json
- разбить строку на все нецифровые подстроки (это также обрезает значения)
- удалить дубликаты с помощью
array_flip()
- переиндексироватьрезультирующий массив с использованием
array_keys()
(выходные значения целочисленного типа)
Метод № 2:
- преобразование многомерного массива в строку json
- извлечение слов (которые в данном случае включают цифры, и не нужно беспокоиться о каких-либо буквах)
- исключение дубликатов с помощью
array_flip()
- переиндексация полученного результатамассив с использованием
array_keys()
(выходные значения целочисленного типа)
Код: ( Демонстрация )
$array=[['8227','8138'],[' 8227',' 8138',' 7785']];
echo "regex method: ";
var_export(array_keys(array_flip(preg_split('/\D+/',json_encode($array),NULL,PREG_SPLIT_NO_EMPTY))));
echo "\n\nnon-regex method: ";
var_export(array_keys(array_flip(str_word_count(json_encode($array),1,'0..9'))));
Вывод:
regex method: array (
0 => 8227,
1 => 8138,
2 => 7785,
)
non-regex method: array (
0 => 8227,
1 => 8138,
2 => 7785,
)
Если любой из этих методов работает хорошо, он будетпотому что они не делают повторные вызовы функций.
ps Хорошо, потому что мне было любопытно, я только что провел очень маленький / неофициальный тест скорости на моих двух методах и методе DaveRandom (только 1000 итераций с использованием данных OP - я не хотел злоупотреблять 3v4l.org) и ...
- Метод № 1 работал примерно так же быстро, как метод № 2
- И метод № 1, и метод № 2 работали быстрее, чем метод DaveRandom.
Опять же, я утверждаю, что сфабрикованные тесты для микрооптимизации могут быть бессмысленными, и необходимо проводить реальные тесты на ваших РЕАЛЬНЫХ данных, ЕСЛИ это действительно важно.Если вы просто предпочитаете логический поток другого ответа на этой странице, я полностью уважаю это.