harf duyarsız array_unique

2 Cevap php

Ben bir harf duyarsız bir dizi benzersiz türü işlevi yapmak için kod birkaç satır yazmaya çalışıyorum. İşte ben bugüne kadar ne var:

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

Sorun if deyimidir. Ben sözdizimi ile yanlış bir şey olduğunu düşünüyorum, ama ben PHP nispeten yeni ve ben bunun ne olduğundan emin değilim. Herhangi bir yardım?

2 Cevap

Sen küçük harf sürümüne hem lvalue ve uvalue kuruyorlar.

 $uvalue = strtolower($value);

olmalıdır

 $uvalue = strtoupper($value);

O dedi, bu biraz daha hızlı olabilir. Lütfen fonksiyonunun performansı bu daha az ya da doğrusal olacak ise, katlanarak aşağılamak (bir tahmin değil, bir comp-bilim major at ...) olacak

<?php

function array_iunique($ar) {
  $uniq = array();
  foreach ($ar as $value)
    $uniq[strtolower($value)] = $value;
  return array_values($uniq);
}
?>

ve başka bir alternatif ...

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 ait olsa iyidir.