Nasıl dosya ortak dizeleri gruplarını tespit ediyorum

3 Cevap php

Ben dosyaları tanırlar bir şekilde anlamaya çalışıyorlar duyuyorum. Örneğin:

Verilen bir dizin aşağıdaki dosyaları varsa:

  • Birthday001.jpg
  • Birthday002.jpg
  • Birthday003.jpg
  • Picknic1.jpg
  • Picknic2.jpg
  • Afternoon.jpg.

Ben böyle bir şey için yoğunlaşmasına listesini almak istiyorum

  • Doğum Günü (3 resim)
  • Picknic (2 resim)
  • Öğleden sonra (1 resim)

Nasıl gruplarını tespit gitmeli?

3 Cevap

Burada kaba kuvvet yönteminin daha verimli bunu çözmek için tek yol, bu.

  • anahtar adı ve adına eşit değere eşit ama elimden basamaklı ile ilişkilendirilebilir bir diziye bütün isimleri yük (preg_replace('/\d//g', $key)).

Sen $arr1 = [Birthday001 => Birthday, Birthday002 => Birthday ...] gibi bir şey olacak

  • şimdi sayılacağını ilk dizi ve değer değerleri tuşları ile başka bir ilişkisel dizi yapmak. Zaten anahtarı gördüm sayısını artırmak.
  • sonunda sen istediğin gibi, adlarını ve sayılarını içeren bir 2 dizi ile sona erecek. Gibi bir şey $arr2 = [Birthday => 2, ...]

Basitçe olan tuşlar regex tarafından değiştirilmiş bir histogram oluşturmak:

<?php

# input
$filenames = array("Birthday001.jpg", "Birthday002.jpg", "Birthday003.jpg", "Picknic1.jpg", "Picknic2.jpg", "Afternoon.jpg");

# create histogram
$histogram = array();
foreach ($filenames as $filename) {
    $name = preg_replace('/\d+\.[^.]*$/', '', $filename);
    if (isset($histogram[$name])) {
        $histogram[$name]++;
    } else {
        $histogram[$name] = 1;
    }
}

# output
foreach ($histogram as $name => $count) {
    if ($count == 1) {
        echo "$name ($count picture)\n";
    } else {
        echo "$name ($count pictures)\n";
    }
}

?>

Gibi kelimelerin bir dizi oluşturmak "benim" ve tüm dosya adları üzerinden bu şerit (bu diziyi gelişen çok önemli olacaktır, "benim" tek verildiğinde, örneğin biridir). Tüm numaraları ve noktalama dışında şerit, ayrıca uzantıları uzun bu noktada gitmiş olması gerekir. Bu yapıldıktan sonra, bir diziye özgü tüm sonuçları koydu. Daha sonra diğer işleme anlayamadım herhangi stragglers aramak için anahtar kelime oldukça güvenilir bir kaynak olarak kullanabilirsiniz.