Я пытаюсь понять, какой способ получить тот же результат лучше, например, более быстрое и меньшее использование памяти.
$resp = [];
foreach($data as $val){
$resp[$val] = $val;
}
return array_values($resp);
против
$resp = [];
foreach($data as $val){
if (!\in_array($val, $resp, false)){
$resp[] = $val;
}
}
return $resp;
Я думал, что первый вариант будет использовать больше памяти, поскольку он будет иметь значения в качестве ключей,
но второй вариант потребует больше процессора, поскольку ему придется проверять in_array на предмет постоянно растущего массива.
Любые идеи?
Результат должен быть
[
0 => 'no dup data',
1 => 'no dup data 1',
...
]
Вы просто пытаетесь получить то же самое, что и array_unique()?
microtime(true) и memory_get_usage()@Martin - это не тот же вопрос, что и ur dup
Почему нет? Вы используете гораздо менее эффективные запросы, чем array_unique, вы заявляете, что хотите использовать методы faster and more efficient, поэтому ответы на обман дают вам эти возможности.
Вы можете взглянуть на мой тест здесь. Время моего тестирования показывает, что этот ответ на порядки величины быстрее, чем другие методы.
производительность и использование памяти не включаются, поэтому «лучше» будет субъективно в отношении того, чего вы хотите достичь. Для всех намерений и целей array_unique()3v4l.org/nIah0/perf#output достигнет желаемых результатов быстро, но использовать больше памяти, чем array_values. Альтернативой может быть использование array_flip дважды или array_keys, который заменит индекс на значение и обратно, но это быстрее и использует меньше памяти.






Почему бы тебе не протестировать это самому, а затем показать нам собственное исследование?