Должен ли я использовать asort после array_unique, если массив был отсортирован раньше?
$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);
Должен ли я использовать asort снова, чтобы быть уверенным $arr
сортируется? Мои тесты показывают, что нет, не знаю. Но я не уверен на 100%, если array_unique
фактически удаляет 2 + повторяющиеся элементы.
4 ответа
Вы просто хотите убедиться, что asort
а также array_unique
использовать те же флаги sort_flags.
По умолчанию:
- массив array_unique (массив $ array [, int $ sort_flags = SORT_STRING])
- bool asort (array & $ array [, int $ sort_flags = SORT_REGULAR])
Таким образом, вы можете видеть, что каждый будет сортировать на основе другого алгоритма, который может в основном совпадать, но вы хотите, чтобы он явно совпадал. Таким образом, разумные деньги на принятии решения, как:
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
asort($input,SORT_REGULAR);
print_r($input);
print "\n";
$result = array_unique($input,SORT_REGULAR);
print_r($result);
В результате чего:
Array
(
[1] => blue
[a] => green
[b] => green
[2] => red
[0] => red
)
Array
(
[1] => blue
[a] => green
[2] => red
)
Также обратите внимание, что если вы просто запустите array_unique
без начального asort
, вы получите разные результаты.
Наконец, обратите внимание, что asort
поддерживает два флага, которые array_unique
не поддерживается:
SORT_NATURAL
- сравнивать элементы как строки, используя "естественный порядок", например, natsort ()SORT_FLAG_CASE
- можно комбинировать (побитовое ИЛИ) сSORT_STRING
или жеSORT_NATURA
L для сортировки строк без учета регистра
Если вы используете любой из этих двух в вашем asort
тогда вам обязательно нужно будет asort
снова после array_unique
,
Нет, вам не нужно. array_unique удалит только элементы, поэтому порядок всегда будет сохранен.
Если вы не измените массив после 'asort()', массив будет упорядочен.
Нет, ты не должен Функция array_unique
сохраняет ключи, поэтому нет необходимости сортировать их снова.