Я пытаюсь записать несколько строк кода для создания нечувствительного к регистру массива уникальной функцией типа. Вот то, что я имею до сих пор:
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);
}
}
Проблема если оператор. Я думаю, что существует что-то не так с моим синтаксисом, но я относительно плохо знаком с PHP, и я не уверен, каково это. Какая-либо справка?
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;
}
Pentium10, тем не менее, лучше.
Разве $ uvalue не должно быть прописным? Итак,
$uvalue = strtoupper($value):
Вы устанавливаете как lvalue
, так и uvalue
в нижний регистр.
$uvalue = strtolower($value);
должно быть
$uvalue = strtoupper($value);
Тем не менее, это могло бы быть немного быстрее. Производительность вашей функции будет экспоненциально ухудшаться, в то время как это будет более или менее линейным (предположительно, не в области компьютерной науки ...)
<?php
function array_iunique($ar) {
$uniq = array();
foreach ($ar as $value)
$uniq[strtolower($value)] = $value;
return array_values($uniq);
}
?>