2010-02-16 19 views
27

Büyük/küçük harf duyarlı bir dizi benzersiz tip işlevi yapmak için birkaç satır kod yazmayı deniyorum. Şimdiye kadar elimdekiler:büyük harf duyarlı dizi_dizisi

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 ifadesidir. Bence sözdizimi ile yanlış bir şey var, ama PHP için nispeten yeni ve ne olduğundan emin değilim. Herhangi bir yardım?

cevap

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

Awesome! Teşekkürler! – williamg

+11

@ Pentium10: Çözümünüzün kaynağına kredi vermelisiniz: http://www.php.net/manual/de/function.array-unique.php#78801 – sieppl

+3

büyük bulmak Pentium10, strtolower olsa da tırnak içinde olmalıdır. – Orlymee

2

Küçük harf sürümüne hem lvalue hem de uvalue ayarlıyorsunuz.

$uvalue = strtolower($value); 

, bu biraz daha hızlı olabileceğini söyledi

$uvalue = strtoupper($value); 

olmalıdır. Bu aşağı yukarı doğrusal olacaktır ederken fonksiyonunun performans

<?php 

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

wow -.- bazen sanırım sadece bir çift göze ihtiyacım var. haha teşekkürler! Yine de, bu hala tam olarak değil. Neyin yanlış olduğundan emin değil ... Gösteren değerler, her ikisi de görüntüleniyor olan yinelenen değerlerdir (jQuery ve jQuery gibi). Ama farklı olan (php ve PHP gibi) değerlerle de gösterilmez. Garip ... – williamg

+0

Güzel çözüm! Beni rahatsız eden tek şey, orijinal 'array_unique' işlevinin tuşları koruduğu, ancak bu durumun önemli olmadığını sanıyorum. –

+1

@Tatu Bazı verilerden vazgeçtiğinizde anahtarları korumak zor olurdu ... hangi anahtarı koruyorsunuz? Rastgele seçilen ilk mi, yoksa son mu? – meagar

0

uvalue harfli olması değil, $ mı (bir tahmin değil, bir comp-bilim majör de ...), katlanarak düşer? Yani

$uvalue = strtoupper($value): 
0

ve başka 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 en gerçi daha iyidir.

İlgili konular