У меня есть 1 массив, который я хочу повторно индексировать. Я нашел это обоими array_values
и array_merge
функции могут сделать задание (и мне не нужны 2 массива для array_merge
функционируйте для работы).
Который быстрее для очень большого массива? Я сравнил бы этого, но я не знаю, как и еще не имеют большого массива.
Перед переиндексом:
Array
(
[0] => AB
[4] => EA
[6] => FA
[9] => DA
[10] => AF
)
После переиндекса:
Array
(
[0] => AB
[1] => EA
[2] => FA
[3] => DA
[4] => AF
)
Я тоже не делал бенчмарки - и если вам нужно быть уверенным, вам стоит их сделать.
Тем не менее, я подозреваю, что если одно предпочтительнее другого, то array_values() будет лучшим вариантом.
В конце концов, то, что вы хотите сделать, - это именно то, для чего был разработан array_values().
Я получил бенчмарк, array_value в 3 раза быстрее (извините, что отвечаю на свой вопрос, раздел комментариев не сохраняет формат)
для массива с 8043 элементами
array values занял 0.003291130065918 секунд.
объединение массивов заняло 0.0096800327301025 секунд.
$shuf - это неиндексированный массив
Ниже приведен код для выполнения бенчмарка (скопировал его из Интернета)
$sha1_start = microtime(true);
$arraymerge = array_merge ($shuf);
$shal_elapsed = microtime(true) - $sha1_start;
$start = microtime(true);
$arrayvalue = array_values ($shuf);
$elapsed = microtime(true) - $start;
echo "<br>array values took $elapsed seconds.";
echo "<br>array merge took $shal_elapsed seconds.";
array_values предназначен для того, чтобы делать именно то, что вы хотите. array_merge предназначен для чего-то другого, и вы получили обходной путь, чтобы заставить его работать в вашем случае. (хотя у вас могут возникнуть проблемы, если в индексах будет забыто нечисловое значение).
Я не знаю, есть ли существенные различия в производительности, но код, написанный с использованием array_values, легче читать. И я не думаю, что функция, предназначенная для выполнения чего-то одного, работает медленнее, чем функция, предназначенная для выполнения чего-то другого.
Надеюсь, это поможет.
Важно отметить, что array_merge ()
сбрасывает ключи массива только в том случае, если в массиве нет строковых ключей.