array_unique() не делает массив уникальным

#php #arrays

#php #массивы

Вопрос:

Я генерирую массив чисел на основе уравнения, затем округляю до ближайшего 100.

После этого я хочу избавиться от дубликатов, array_unique что казалось естественным выбором для этой ситуации, но работает не так, как предполагалось.

Я создал небольшой пример, чтобы продемонстрировать это. PHP-код выглядит следующим образом:

 var_dump($amounts);
array_unique($amounts);
var_dump($amounts);
  

Результатом чего является:

 array(6) {
  [0]=>
  float(200)
  [1]=>
  float(300)
  [2]=>
  float(300)
  [3]=>
  float(400)
  [4]=>
  float(500)
  [5]=>
  float(500)
}
array(6) {
  [0]=>
  float(200)
  [1]=>
  float(300)
  [2]=>
  float(300)
  [3]=>
  float(400)
  [4]=>
  float(500)
  [5]=>
  float(500)
}
  

Может кто-нибудь пролить свет на то, что здесь происходит, пожалуйста?

Ответ №1:

array_unique не изменяет массив по ссылке. Вам нужно будет перехватить возвращаемое значение:

$amounts = array_unique($amounts);

Примечание: ключи возвращаемого массива могут больше не быть смежными. Если вы хотите снова сделать их смежными, вам следует использовать array_values .

Пример:

 $amounts = array(100, 200, 200, 200, 300, 400);
var_dump($amounts);
array(6) {
  [0]=>
  int(100)
  [1]=>
  int(200)
  [2]=>
  int(200)
  [3]=>
  int(200)
  [4]=>
  int(300)
  [5]=>
  int(400)
}

// Make the array unique
$amounts = array_unique($amounts);
var_dump($amounts);
array(4) {
  [0]=>
  int(100)
  [1]=>
  int(200)
  [4]=>
  int(300) // Notice the gap, indexes 2 and 3 don't exist.
  [5]=>
  int(400)
}

// Make the keys contiguous
$amounts = array_values($amounts);
var_dump($amounts);
array(4) {
  [0]=>
  int(100)
  [1]=>
  int(200)
  [2]=>
  int(300)
  [3]=>
  int(400)
}
  

Комментарии:

1. Я такой новичок. Какая простая вещь, которая ускользает от моего ума. Спасибо.

2. Первого лайнера было достаточно, я приму его еще через 5 минут. Спасибо за подробности, хотя