Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
PERSO
/
Filtrage_version
:
work01.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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>"; ?>