Должен ли я использовать 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 не поддерживается:

  1. SORT_NATURAL - сравнивать элементы как строки, используя "естественный порядок", например, natsort ()
  2. SORT_FLAG_CASE - можно комбинировать (побитовое ИЛИ) сSORT_STRING или же SORT_NATURAL для сортировки строк без учета регистра

Если вы используете любой из этих двух в вашем asort тогда вам обязательно нужно будет asort снова после array_unique,

Нет, вам не нужно. array_unique удалит только элементы, поэтому порядок всегда будет сохранен.

Если вы не измените массив после 'asort()', массив будет упорядочен.

Нет, ты не должен Функция array_unique сохраняет ключи, поэтому нет необходимости сортировать их снова.

Другие вопросы по тегам