File "work01.php"
Full Path: /home/analogde/www/FTP/Monsta-FTP-master/Filtrage_version/work01.php
File size: 6.64 KB
MIME-type: text/x-php
Charset: utf-8
<?php
function filtrage()
{
$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"
];
//echo "+++++++++++++ Detection ++++++++++++++++++++++++";
// Tableau pour stocker les fichiers d'origine et leurs versions
$resultat = [];
$autresFichiers = []; // Pour les fichiers sans versions (_vX)
// 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 fichiers
$autresFichiers[] = $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
//echo "<pre>";
//print_r($resultat);
//echo "<pre>";
//echo "++++++++ Liste des originaux ++++++++++++++++++++++++";
$listing_keys = array_keys($resultat);
//echo "<pre>";
//print_r( $listing_keys );
//echo "</pre>";
//echo "+++++++++++++ Intermediaire ++++++++++++++++++++++++";
//print_r(array_keys($resultat));
//$retour = array_values($resultat["fichier.txt"]);
//echo "<pre>";
//print_r($retour);
//echo "<pre>";
for ($x = 0; $x <count($listing_keys); $x++)
{
//echo " ---> " .$listing_keys[$x];
$resultat[ $listing_keys[$x] ] = array_values($resultat[ $listing_keys[$x] ]);
}
//echo "<pre>";
//print_r($resultat);
//echo "<pre>";
/*
// Convertir en chaîne lisible
$content = print_r($resultat, true);
// Sauvegarder dans un fichier
file_put_contents('tableau.txt', $content);
for ($x = 0; $x <count($listing_keys); $x++)
{
echo " ---> " .$listing_keys[$x] ."<br>";
}
*/
/*
// Parcourir le tableau principal
foreach ($resultat as $key => $subArray)
{
echo "Clé principale : $key\n"; // Affiche la clé principale
foreach ($subArray as $subKey => $value)
{
echo " - Sous-clé : $subKey, Valeur : $value\n"; // Affiche la sous-clé et la valeur
}
echo "\n"; // Ligne vide pour mieux séparer les résultats
}
*/
//echo "+++++++++++++ Bidule ++++++++++++++++++++++++";
$resultat["version_initial"] = [];
$tab = array();
// Parcourir le tableau principal
foreach ($resultat as $key => $subArray)
{
// Obtenir le nombre d'éléments dans le sous-tableau
$count = count($subArray);
//echo "Clé principale : $key contient $count élément(s)\n";
if( $count == 1)
{
if( $key === $subArray[0] )
{
//echo "++++ " .$key ." " .$subArray[0];
$tab[] = $key;
$resultat["version_initial"][] = $key;
}
}
// Afficher les éléments successivement
/*foreach ($subArray as $value) {
echo " - $value\n";
}*/
//echo "\n"; // Ligne vide pour mieux séparer les résultats
}
//echo "<pre>";
//print_r($tab);
//echo "</pre>";
//echo "+++++++++++++ Post traitement ++++++++++++++++++++++++";
//unset( $resultat[ $tab[0] ]);
//unset( $resultat[ $tab[1] ]);
// dans l'exemple, on avait 2 elements mais il peut en avoir 0, 1, 3, ....
// donc il faut une boucle
for ($x = 0; $x <count($tab); $x++)
{
unset( $resultat[ $tab[$x] ]);
}
unset($resultat["version_initial"]);
//echo "<pre>";
//print_r($resultat);
//echo "<pre>";
return array(
"tableau_version_initial" => $listing_keys,
"tableau_version_liste" => $resultat
);
// récupére toutes les clés et supprimer version_initial
/*
$listing_keys = [];
$listing_keys = array_keys($resultat);
print_r($listing_keys);
*/
/*
echo "+++++++++++++++++++++++++";
// Vérifier si "image.png" existe dans le tableau
if (in_array("version_initial", $listing_keys))
{
// Trouver l'index de "image.png"
$key = array_search("version_initial", $listing_keys);
// Supprimer l'élément à cet index
unset($listing_keys[$key]);
}
// Réindexer le tableau après suppression
$listing_keys = array_values($listing_keys);
// Afficher le tableau après suppression
print_r($listing_keys);
for ($x = 0; $x <count($listing_keys); $x++)
{
echo " ---> " .$listing_keys[$x] ."<br>";
}
*/
/*
if (isset($resultat["version_initial"]))
{
$version_initial_values = $resultat["version_initial"];
// Afficher les valeurs
foreach ($version_initial_values as $value)
{
echo $value . "\n";
$listing_keys[] = $value;
}
}
else
{
echo "La clé 'version_initial' n'existe pas dans le tableau.\n";
}
*/
//print_r($listing_keys);
}
$zorro = filtrage();
echo "<pre>";
print_r($zorro);
echo "<pre>";
?>