File "filtre07.php"

Full Path: /home/analogde/www/Documents/PERSO/filtre07.php
File size: 2.42 KB
MIME-type: text/x-php
Charset: utf-8

<?php
// Tableau de noms de fichiers
$fichiers = [
    "fichier.txt",
    "fichier_v1.txt",
    "fichier_v2.txt",
    "fichier_v3.txt",
    "autre_fichier.txt",
    "fichier_v4.txt",
    "document.pdf",
    "document_v1.pdf",
    "image.png",
    "image_v1.png",
    "unique_file.docx"
];

// Tableau pour regrouper les fichiers par clé
$resultat = [];
$autres = []; // Pour les fichiers sans versions (_vX)
$pipo = [];   // Tableau particulier

// Parcourir tous les fichiers
foreach ($fichiers as $fichier) {
    // Vérifier si le fichier correspond au format avec ou sans version
    if (preg_match('/^(.*?)(_v[0-9]+)?(\.[a-z0-9]+)$/i', $fichier, $matches)) {
        // Extraire le nom du fichier source (nom de base + extension)
        $sourceFile = isset($matches[2]) ? $matches[1] . $matches[3] : $fichier;

        // Ajouter au tableau des résultats
        if (!isset($resultat[$sourceFile])) {
            $resultat[$sourceFile] = [];
        }
        $resultat[$sourceFile][] = $fichier;
    } else {
        // Si le fichier ne correspond pas au modèle avec versions, l'ajouter aux autres
        $autres[] = $fichier;
    }
}

// Supprimer les fichiers d'origine qui ont des versions
foreach ($resultat as $source => &$versions) {
    // Si le tableau contient plus d'un fichier (le fichier source + des versions)
    if (count($versions) > 1) {
        // Supprimer le fichier source
        $versions = array_filter($versions, function ($file) use ($source) {
            return $file !== $source;
        });
    }
}
unset($versions); // Libérer la référence

// Regrouper tous les fichiers (avec ou sans versions) dans un tableau unique sous "autres"
$finalResult = $resultat;
if (!empty($autres)) {
    $finalResult['autres'] = $autres;
}

// Parcourir le tableau final pour gérer les sous-tableaux avec un unique élément
foreach ($finalResult as $key => $files) {
    if (count($files) === 1 && $files[0] === $key) {
        // Ajouter au tableau "pipo"
        $pipo[] = $files[0];
        // Supprimer le sous-tableau correspondant
        unset($finalResult[$key]);
    }
}


echo "<pre>";
print_r($finalResult);
echo "<pre>";


// Afficher les résultats
echo "Tableau Pipo :\n";
foreach ($pipo as $file) {
    echo "  - $file\n";
}
echo "\nTableau Final :\n";
foreach ($finalResult as $key => $files) {
    echo "Clé : $key\n";
    echo "Fichiers :\n";
    foreach ($files as $file) {
        echo "  - $file\n";
    }
    echo "\n";
}
?>