Trouver les doublons dans une liste de fichiers

Contenu du snippet

Bonjour à tous.

Je passe à cette fonction une liste de fichiers et elle me retourne un tableau des doublons trouvés.

Source / Exemple :


<pre>
    <?php

    function compareFiles($files) {
        // On hache le fichier et on utilise cette valeur comme index d'un tableau.
        // Ainsi, les fichiers identiques sont automatiquement regroupés.
        $hash = array();
        foreach ($files as $value) {
            $hash[hash_file("md5", $value)][] = $value;
        }
        $tmp = array();
        //On ne récupère que les doublons.
        foreach ($hash as $value) {
            if (sizeof($value) > 1)
                $tmp[] = $value;
        }
        return $tmp;
    }

    //Test :
    $files = array("work/01.avi",
        "work/02.avi",
        "work/02_copie.avi",
        "work/03.avi",
        "work/04.wmv",
        "work/04_copie.txt", //Ca marche aussi si on change l'extension du fichier.
        "work/05.wmv",
        "work/05_copie.wmv");
    print_r(compareFiles($files));

    /* Voici le résultat obtenu :
      Array
          (
              [0] => Array
                  (
                  [0] => work/02.avi
                  [1] => work/02_copie.avi
                  )
              [1] => Array
                  (
                  [0] => work/04.wmv
                  [1] => work/04_copie.txt
                  )
              [2] => Array
                  (
                  [0] => work/05.wmv
                  [1] => work/05_copie.wmv
                  )
          )

  • /
?>

Conclusion :


Voilà. C'est super gourmand en ressources avec de gros fichiers (j'ai testé avec des vidéos), mais ça a l'air de bien marcher. A utiliser avec parcimonie à mon avis, et pas tel quel.

C'est la première fois que je poste une source et comme plein de gens j'apprends sur le tas, du coup je suis preneur pour tout commentaire qui me permettrai de m'améliorer!

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.