请阅读the manual。 array_unique 不重置数组键。此外,for 循环非常好,但 foreach 是一种更适合处理数组(和对象)的语言结构。
也就是说,在应用array_unique 后重置数组键的最快方法是sort 数组:
$a = array( 'Pritesh','Pritesh','Nilesh' );
$b = array_unique($a);
sort($b);
var_dump($b);
这会导致:
array(2) {
[0]=>
string(6) "Nilesh"
[1]=>
string(7) "Pritesh"
}
这同时适用于for 和foreach。
编辑:
在 TMTOWTDI 编程中经常出现这种情况(有不止一种方法可以做到)。这里有几种方法,从有效到荒谬:
快速:
foreach($uniques as $unique) echo '<option value="', $unique, '">', $unique,'</option>';
是的,这些是逗号,逗号 + echo 实际上比串联更快(~20-30%)
何时使用:只要你喜欢它,它不会改变 $uniques 数组(因此它的索引仍然不一致),但它快速且易于阅读。
修复$uniques索引:
sort($uniques);
foreach($uniques as $unique) echo '';//same deal
与之前版本的不同之处在于,这里也可以将foreach 替换为for,并且$uniques 数组将再次被正确索引。元素的顺序可能已更改。
如果元素的顺序很重要,并且您想要一个整齐索引的数组,请使用:
$uniques = array_values($uniques);//as Shankar Damodaran suggested
当您的用例符合上述非常具体且不太可能的情况时使用。
或者,事情正在从这里开始变得荒谬:
function keepOrder($a, $b)
{
return 0;
}
usort($uniques, 'keepOrder);
使用:从不
由于我们在过度设计解决方案方面做得相当远,让我们将其扩展到解决方案再次成为问题的范围(警告,以下代码可能会导致你的眼睛流血):
//get the highest key in array, add 1
$max = max(array_keys($uniques)) + 1;
for($i=0;$i<$max;++$i) if (isset($uniques[$i])) echo $unique;
我故意让上面的代码更难阅读,以避免任何人使用它。
何时使用:当您临床精神失常或想看到同事穿着紧身衣被带走,大喊“恐怖,恐怖”时使用。
说真的:不要使用它。