不区分大小写array_unique
我正在尝试写几行代码来使大小写不敏感的数组唯一类型函数。这是我到目前为止:不区分大小写array_unique
foreach ($topics as $value) {
$lvalue = strtolower($value);
$uvalue = strtolower($value);
if (in_array($value, $topics) == FALSE || in_array($lvalue, $topics) == FALSE || in_array($uvalue, $topics) == FALSE) {
array_push($utopics, $value);
}
}
麻烦的是if语句。我认为我的语法有些问题,但是我对PHP比较陌生,我不确定它是什么。任何帮助?
function array_iunique($array) {
return array_intersect_key(
$array,
array_unique(array_map("StrToLower",$array))
);
}
您正在将lvalue
和uvalue
设置为小写版本。
$uvalue = strtolower($value);
应该
$uvalue = strtoupper($value);
那说,这可能会快一点。你的函数的性能将成倍降低,而这将是或多或少的线性(在猜测,而不是COMP-SCI大...)
<?php
function array_iunique($ar) {
$uniq = array();
foreach ($ar as $value)
$uniq[strtolower($value)] = $value;
return array_values($uniq);
}
?>
哇 - 有时我想我只需要另一双眼睛。哈哈谢谢!尽管如此,这仍然没有完成。不知道有什么问题... 显示的值是重复值(如jQuery和jQuery)都显示的值。但是不同的值(如php和PHP)都没有显示出来。奇怪... – williamg 2010-02-16 21:14:03
不错的解决方案!唯一令我困扰的是原始'array_unique'函数保留了键,而这不是,但我猜这在这种情况下并不重要。 – 2010-02-16 21:21:27
@Tatu当你丢弃一些数据时,你很难保存密钥......你保留哪个密钥?第一个,还是最后一个,或随机选择的一个? – meagar 2010-02-16 21:22:36
于$ uvalue不大写? 所以
$uvalue = strtoupper($value):
和另一种选择......
function array_iunique($topics) {
$ltopics = array_map('strtolower', $topics);
$cleanedTopics = array_unique($ltopics);
foreach($topics as $key => $value) {
if(!isset($cleanedTopics[$key])) {
unset($topics[$key]);
}
}
return $topics;
}
Pentium10的更好,但。
太棒了!谢谢! – williamg 2010-02-16 21:21:09
@ Pentium10:你应该给你的解决办法的来源:http://www.php.net/manual/de/function.array-unique.php#78801 – sieppl 2012-02-14 14:42:54
伟大的发现Pentium10,strtolower应该在引号。 – Orlymee 2012-04-12 13:51:49