2014-02-13 55 views
4

我想学习如何使用array_unique,所以我做了一些示例代码,并没有得到我的预期。php 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]; 

例如,这给了我'15263'的输出,但不是7.经过几次测试后,我认为它停止寻找它发现第一个重复。这是应该发生的吗?

回答

8

原因$uniques输出

Array 
(
    [0] => 1 
    [1] => 5 
    [2] => 2 
    [3] => 6 
    [4] => 3 
    [6] => 7 
) 

您的数组不包含关键5,但在你的for循环echo $uniques[$i];不持有值echo $uniques[5];。这是缺少原因值7

试试这个,

foreach($uniques as $unique){ 
    echo $unique; 
} 

,而不是

for($i = 0; $i < count($uniques); $i++) 

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

$uniques = array_values($uniques); 
    for($i = 0; $i < count($uniques); $i++) 
    echo $uniques[$i]; 
+0

工作!你能解释为什么吗? – mucle6

+0

你的数组值不包含密钥'5',那就是为什么 –

+2

为什么它不包含'5'?这是需要解决的问题。答案是:这是因为'array_unique()'保留了键。 [文档](http://php.net/array_unique)指出:'注意键被保留'。由于你使用的'for'循环是基于数字索引对数组进行操作的,数组中的缺失位置将意味着它不会被回显。如果您[启用错误报告](http://stackoverflow.com/a/6575502/1438393),您会看到一条错误消息,指出“未定义的偏移量”。 –

6

由于array_unique保留了密钥,因此无法使用for循环正确访问数组$uniques。无论是使用foreach循环或更改代码的第七行:

$uniques = array_values(array_unique($array, SORT_REGULAR)); 
+0

我试过了,但它给相同的输出。 – mucle6

+1

@ mucle6:这是因为'$ uniques'数组键是**不连续**。你需要为'for'循环重新编制索引:https://eval.in/101407 –

+0

@AmalMurali对不起,我不得不立刻写出这个答案,之后马上留下StackOverflow,所以没有范围更新我的答案并使其更加清晰/精细。现在我很高兴看到接受的答案和你的意见说了我不得不说的一切(甚至更多)。特别感谢您珍贵的演示。 –