php array_unique无法按预期工作

muc*_*le6 5 php array-unique

我正在尝试学习如何使用array_unique,所以我制作了一些示例代码,但我没有得到我的预期.

$array[0] = 1;
$array[1] = 5;
$array[2] = 2;
$array[3] = 6;
$array[4] = 3;
$array[5] = 3;
$array[6] = 7;
$uniques = array_unique($array, SORT_REGULAR);
for($i = 0; $i < count($uniques); $i++)
    echo $uniques[$i];
Run Code Online (Sandbox Code Playgroud)

例如,这给了我''15263'但不是7的输出.经过一些测试后,我认为它停止了它找到第一个副本.这是应该发生的吗?

Kri*_*h R 9

$uniques输出的原因是

 Array
(
    [0] => 1
    [1] => 5
    [2] => 2
    [3] => 6
    [4] => 3
    [6] => 7
)
Run Code Online (Sandbox Code Playgroud)

您的数组不包含键5,但在您的for循环中不包含echo $uniques[$i];echo $uniques[5];.这7就是缺少价值的原因.

试试这个,

foreach($uniques as $unique){
   echo $unique;
}
Run Code Online (Sandbox Code Playgroud)

代替

 for($i = 0; $i < count($uniques); $i++)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用array_values($uniques)和重新索引数组,

  $uniques = array_values($uniques);
  for($i = 0; $i < count($uniques); $i++)
   echo $uniques[$i];
Run Code Online (Sandbox Code Playgroud)

  • 为什么不包含`5`?这是需要解决的问题.这是答案:这是因为`array_unique()`保留了键.[文档](http://php.net/array_unique)声明:`注意密钥被保留.因为你正在使用一个基于数字索引在数组上运行的`for`循环,所以数组中缺少的位置意味着它不会被回显.如果您[启用了错误报告](http://stackoverflow.com/a/6575502/1438393),您会看到一条错误消息"未定义的偏移量". (4认同)

Sha*_*tta 8

由于array_unique保留了密钥,因此无法通过循环$uniques正确访问阵列for.使用foreach循环或将代码的第七行更改为:

$uniques = array_values(array_unique($array, SORT_REGULAR));
Run Code Online (Sandbox Code Playgroud)

  • @ mucle6:这是因为$ uniques数组键不是连续的。您需要重新索引它才能使`for`循环起作用:https://eval.in/101407 (2认同)