不区分大小写的array_unique

2022-08-30 13:21:11

我正在尝试编写几行代码来制作不区分大小写的数组唯一类型函数。以下是我到目前为止所拥有的:

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相对较新,我不确定它是什么。有什么帮助吗?


答案 1
function array_iunique( $array ) {
    return array_intersect_key(
        $array,
        array_unique( array_map( "strtolower", $array ) )
    );
}

答案 2

您正在同时设置两者,并设置为小写版本。lvalueuvalue

 $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);
}
?>