4 diziler üzerinden dosya (dizeler) sıralamak

1 Cevap php

I am after a function which will let me sort a bunch of filenames over 4 arrays. However, the a file must always end up in the same array - even if the number of files change.

Eg if I have files myfile.html anotherfile.html morefiles.html test.html

and my arrays array1, array2, array3, array4

If I run this function then array1 might get myfile.html and anotherfile.html

Ben tekrar çalıştırın ve (anotherfile.html geçemiyor gibi veya daha az dosyaları) biraz daha fazla dosya eklerseniz, o zaman ben hala dizi1 dosyam.html almak için beklediğiniz

Yani sadece, ben daha sonra belirli bir diziye işaret etmek için kullanabileceğiniz dosya karma için bir yol gerekir, böylece her dizideki kaç dosya denetler rastgele ya da bir değil, tutarlı olması gerekir.

1 Cevap

Böyle bir görevi çözmek için birçok farklı yolu vardır, ne altında konuya bir very temel bir giriştir. Büyük, yararlı, yoksa ben en azından gitmek (ya da değil!) Isteyebilirsiniz ne bir fikir verir umarım.

(Muhtemelen bunu aşina sırf bu durumda MD5 in) Bu örnek, basit dosya karmasını alır. sscanf sadece karma ilk karakterini alır ve (md5 () bir onaltılık sayı döndürür) 0 ile 15 arasında bir sayıya dönüştürür. Sadece dört diziler arasında dağıtmak istediğim $num, her zaman daha sonra bir olarak kullanılır, 0, 1, 2 veya 3 neden olur, böylece modül operatör (%) kullanılır dizi anahtarı (vb $ array1, $ Dizi2, cf).

$files = array('a.html','b.html','c.html','d.html');
$arrays = 4;
$array = array_fill(0, $arrays, array());
// For each file name put it into the appropriate slot in $array
foreach ($files as $filename) {
    sscanf(md5($filename), '%1x', $hex);
    $key = $hex % $arrays;
    $array[$key][] = $filename;
}
// See what happened
var_dump($array);

Bu özel Örneğin, elde edilen dizi (isterseniz hangi size ayrı değişkenler içine itebilir) aşağıdaki yapıya sahiptir:

$array = array(
    0 => array()
    1 => array('c.html')
    2 => array('d.html')
    3 => array('a.html', 'b.html')
);