php - first - case-insensitive array_unique
laravel uppercase first letter (5)
¿Debería $ uvalue no estar en mayúscula? Asi que
$uvalue = strtoupper($value):
Intento escribir unas pocas líneas de código para hacer que la función de tipo único de una matriz insensible a mayúsculas y minúsculas sea mayúscula y minúscula. Esto es lo que tengo hasta ahora:
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);
}
}
El problema es la declaración if. Creo que hay algo mal con mi sintaxis, pero soy relativamente nuevo en PHP y no estoy seguro de qué se trata. ¿Alguna ayuda?
Está configurando tanto uvalue
como uvalue
en la versión en minúscula.
$uvalue = strtolower($value);
debiera ser
$uvalue = strtoupper($value);
Dicho eso, esto podría ser un poco más rápido. El rendimiento de tu función se degradará exponencialmente, mientras que esto será más o menos lineal (en una conjetura, no una competencia de ciencia ficción ...)
<?php
function array_iunique($ar) {
$uniq = array();
foreach ($ar as $value)
$uniq[strtolower($value)] = $value;
return array_values($uniq);
}
?>
y otra alternativa ...
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;
}
Sin embargo, Pentium10 es mejor.
function array_iunique($array) {
return array_intersect_key(
$array,
array_unique(array_map("StrToLower",$array))
);
}
function array_unique_ci ($arr) {
return array_intersect_key (
$arr, array_unique (
array_map (''strtolower'', array_map (''trim'', $arr))
)
);
}
Además, no está de más recortar los valores antes de compararlos.