Я пытаюсь написать несколько строк кода, чтобы создать уникальную функцию типа без учета регистра. Вот что я до сих пор:
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, и я не уверен, что это такое. Любая помощь?
 function array_iunique($array) { return array_intersect_key( $array, array_unique(array_map("StrToLower",$array)) ); } 
  Вы устанавливаете как lvalue и uvalue в нижнюю версию. 
  $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); } ?> 
Должно ли $ uvalue быть не в верхнем регистре? Так
 $uvalue = strtoupper($value): 
и еще одна альтернатива …
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; }не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; }
Впрочем, Pentium10 лучше.