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";
}
?>