#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 минут. Спасибо за подробности, хотя