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


?>