Forum : Array récalcitrant

Array récalcitrant - PHP

Mon array ne m'affiche pas la première image, et en plus il me mélange l'ordre des 4/5 premières images...

Par Claymenia, le Mardi 14 Juillet 2009 à 01:34:51
Autorisé : HTML - Smileys - Balises - Multipost
Par Claymenia, le Mardi 14 Juillet 2009 à 01:34:51
Avatar
Membre
Ahhhhh...

Array & Clay

Bonsoir mina,

Désolé de ne pas venir plus souvent ces derniers temps, je ne vous oublie pas mais je susi su-over-mega-hyper-trucidemment-bouqué...

Juste une question rapide à Zef et à toute autre personne s'y connaissant :

J'ai un array pour la création d'une "galerie" mais celui-ci tronque systématiquement l'image 1, et me mélange les 4/5 suivantes dans un ordre aléatoire (style : 2 - 5 - 4 - 3 - 6)...

Voici mon code, quelqu'un aurait-il une idée ?

CODE :

<?php // on dclare un tableau qui contiendra le nom des fichiers de nos miniatures
    $tableau = array();
    $mini = $path_mini;
    // on ouvre notre dossier contenant les miniatures
    $dossier = opendir($mini);
    while ($fichier = readdir ($dossier)) {
    if ($fichier != '.' && $fichier != '..' && $fichier != 'archives.php') {
      // on stocke le nom des fichiers des miniatures dans un tableau
      $tableau[] = $fichier;
    }
    }
    closedir ($dossier);

    // on dfini le nombre de colonne sur lesquelles vont s'afficher nos miniatures
    $nbcol=12;
    // on compte le nombre de miniatures
    $nbpics = count($tableau);

    // si on a au moins une miniature, on les affiche toutes
    if ($nbpics != 0) {
    echo '<table class="galerie">';
    for ($i=000; $i<$nbpics; $i++){
        if($i%$nbcol==0) echo '<tr>';
        // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille relle
        else echo '<td class="cellule_archives"><a href="' , $path_large , '' , $tableau[$i] , '" class="highslide" onclick="return hs.expand(this)"><img src="' , $path_mini , '' , $tableau[$i] , '" alt="" title="Cliquer pour agrandir" /></a></td>';
        if($i%$nbcol==($nbcol-1)) echo '</tr>';
        }
        if($i%$nbcol==($nbcol != 0)) echo '</tr></table>';
        else echo '</table>';
        }
        // si on a aucune miniature, on affiche un petit message :)
        else echo 'Aucune image à afficher';
?>

Il est chargé comme suit :

CODE :

if  ($_GET['rubrique']=='hiver_08') {
     if  ($_GET['type']=='info'){
     include ("hiver_08.php");
    }

    elseif  ($_GET['type']=='photo') {
    $path_mini =  './archives/hiver_08/thumbs/';
    $path_large =  './archives/hiver_08/large/';
    include ("galerie.php");
    }
    elseif  ($_GET['type']=='video') {
?>
niet
<?php
    }
}

Merci par avance !!! Et promis je vais essayer de revenir rapidement... et avec des cadeaux pour me faire pardonner !!!


Par Zéfling, le Mardi 14 Juillet 2009 à 07:45:18
Avatar
Webmaster

T'as essayé de demander un trie sur le tableau ?

CODE :

usort($tableau, "cmp");

Je te revoie vers la doc pour la fonction de comparaison qui va avec : usort

La plus grande consolation de la médiocrité, c'est que le génie n'est pas immortel.
Par Claymenia, le Mardi 14 Juillet 2009 à 13:42:52
Avatar
Membre

Thx cher Zefling, toutefois j'arrive à afficher la première image mais les autres sont complètement désorganisées... style : 001, 002, 087, 003, 047...

Voici le code :

CODE :

<?php // on dclare un tableau qui contiendra le nom des fichiers de nos miniatures
    function cmp($tableau)
{
    if ($tableau == 0) {
        return 0;
    }
    return ($tableau < 0) ? -1 : 1;
}

    $tableau = array();
    $mini = $path_mini;
    // on ouvre notre dossier contenant les miniatures
    $dossier = opendir($mini);
    while ($fichier = readdir ($dossier)) {
    if ($fichier != '.' && $fichier != '..' && $fichier != 'archives.php') {
      // on stocke le nom des fichiers des miniatures dans un tableau
      $tableau[] = $fichier;
    }
    }
    closedir ($dossier);

    // on dfini le nombre de colonne sur lesquelles vont s'afficher nos miniatures
    $nbcol=12;
    // on compte le nombre de miniatures
    $nbpics = count($tableau);
    usort($tableau, "cmp");

Aurais-je fait une couillonade quelque part ?


Par Zéfling, le Mardi 14 Juillet 2009 à 13:55:13
Avatar
Webmaster
CODE :

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1:1;
}

Et si tu utilises celle là ?


Si personne ne s'en souvient, ça n'est jamais arrivé. La mémoire humaine n'est qu'une donnée. On peut la réécrire. (Lain)
Par Claymenia, le Mardi 14 Juillet 2009 à 14:00:13
Avatar
Membre

ça repars comme avant : pas de première image... mais tout dans l'ordre !

Par Zéfling, le Mardi 14 Juillet 2009 à 14:43:20
Avatar
Webmaster

Tu te sers de print_r ?

Mieux vaut ne rien dire et passer pour un con que de l’ouvrir et ne laisser aucun doute à ce sujet.
Par Claymenia, le Vendredi 17 Juillet 2009 à 13:24:55
Avatar
Membre

Re dsl j'ai eu un problème de ligne adsl (plus de net depuis mon dernier post -_-). Bah là now j'ai un soucis. Pour remédier au problème, j'ai inclu dans le dossier une image noir en 000.jpg. 9a marchait j'avais la première image mais je me suis aperçu qu'à chaque fin de ligne ( </tr> ) quand je passe sur la ligne suivante il me manque une photo. Pour l'exemple : 23 - 24 - 25 </tr><tr> 27 - 28 - 29 ... et ce sur chaque ligne. Là perso ça me dépasse totalement. Merci de votre aide (pas que celle de Zef :p)

Par Claymenia, le Dimanche 19 Juillet 2009 à 01:40:24
Avatar
Membre

Bon en implantant le code directement dans la page ça marche sans soucis...

Par Zéfling, le Mardi 21 Juillet 2009 à 15:42:30
Avatar
Webmaster
hè hè :P

Désolé, j'ai pas le net le week-end et hier j'ai complètement oublié de passé.

Sinon je vois pas trop le rapport avec le sujet. ;) Enfin si ça fonctionne tant mieux.

La plus grande consolation de la médiocrité, c'est que le génie n'est pas immortel.