Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不区分大小写的数组_unique_Php_Arrays_Loops_Foreach - Fatal编程技术网

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;

}