case-insensitive array_unique

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 statement if. Creo que hay algo mal con mi syntax, pero soy relativamente nuevo en PHP y no estoy seguro de qué se trata. ¿Alguna ayuda?

 function array_iunique($array) { return array_intersect_key( $array, array_unique(array_map("StrToLower",$array)) ); } 

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 …)

  

¿Debería $ uvalue no estar en mayúscula? Asi que

 $uvalue = strtoupper($value): 

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.