我正在根据一个等式生成一个数字数组,然后四舍五入到最近的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)
}
有人可以了解这里发生的事情吗?
答案 0 :(得分:5)
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)
}