我正在尝试编写几行代码来制作不区分大小写的数组唯一类型函数。这是我到目前为止所做的:
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比较新,我不确定它是什么。有什么帮助吗?
答案 0 :(得分:58)
function array_iunique( $array ) {
return array_intersect_key(
$array,
array_unique( array_map( "strtolower", $array ) )
);
}
答案 1 :(得分:5)
您将lvalue
和uvalue
都设置为小写版本。
$uvalue = strtolower($value);
应该是
$uvalue = strtoupper($value);
那就是说,这可能会快一点。你的函数的性能将呈指数级下降,而这将或多或少是线性的(猜测,而不是comp-sci major ...)
<?php
function array_iunique($ar) {
$uniq = array();
foreach ($ar as $value)
$uniq[strtolower($value)] = $value;
return array_values($uniq);
}
?>
答案 2 :(得分:0)
$ uvalue应该不是大写的吗? 所以
$uvalue = strtoupper($value):
答案 3 :(得分:0)
和另一种选择......
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虽然更好。
答案 4 :(得分:0)
function array_unique_ci ($arr) {
return array_intersect_key (
$arr, array_unique (
array_map ('strtolower', array_map ('trim', $arr))
)
);
}
另外,在比较它们之前修剪数值并不会造成伤害。