Php 不区分大小写的数组_unique
我正在尝试编写几行代码,以使不区分大小写的数组成为唯一的类型函数。以下是我目前掌握的情况:Php 不区分大小写的数组_unique,php,arrays,loops,foreach,Php,Arrays,Loops,Foreach,我正在尝试编写几行代码,以使不区分大小写的数组成为唯一的类型函数。以下是我目前掌握的情况: foreach ($topics as $value) { $lvalue = strtolower($value); $uvalue = strtolower($value); if (in_array($value, $topics) == FALSE || in_array($lvalue, $topics) == FALSE || in_array($uvalue, $t
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比较陌生,不确定它是什么。有什么帮助吗?您正在将
lvalue
和uvalue
设置为小写版本
$uvalue = strtolower($value);
应该是
$uvalue = strtoupper($value);
也就是说,这可能会快一点。函数的性能将呈指数级下降,而这或多或少是线性的(猜测一下,不是comp-sci-major…)
$uvalue不应该是大写吗? 所以
还有另一种选择
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;
}
不过奔腾10更好。wow--有时候我想我需要的只是另一双眼睛。哈哈,谢谢!不过,这还不够。不知道怎么了。。。显示的值是重复的值(如jQuery和jQuery),两者都显示。但对于不同的值(如php和php),两者都没有显示。奇怪…很好的解决方案!唯一困扰我的是原始的
array\u unique
函数保留了键,而这并不重要,但我想在这种情况下这并不重要。@Tatu当您丢弃一些数据时,很难保留键。。。你保留哪把钥匙?第一个、最后一个或随机选择的?如手册所述:“请注意,键是保留的。array_unique()首先对作为字符串处理的值进行排序,然后将保留每个值遇到的第一个键,并忽略以下所有键。”@Pentium10:您应该相信解决方案的来源:great find Pentium10,strtolower应该用引号括起来。这是否支持多字节字符?@sieppl:php.net/manual/de/function.array unique.php#78801有一个bug,而不是奔腾10的答案;)我会投赞成票,但对于组合使用函数array\u intersect\u key
,这并不完全明显,再加上它是一个只使用代码的答案。一些评论或指向文档的链接(或两者)将非常有助于描述这项工作。
$uvalue = strtoupper($value):
function array_iunique( $array ) {
return array_intersect_key(
$array,
array_unique( array_map( "strtolower", $array ) )
);
}
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;
}