array_unique()没有使数组唯一

时间:2014-06-26 16:42:12

标签: php arrays

我正在根据一个等式生成一个数字数组,然后四舍五入到最近的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 个答案:

答案 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)
}