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...

By Claymenia, the Tuesday 14th July 2009 at 01:34:51
Allowed: HTML - Smileys - BBCode - Multipost
By Claymenia, the Tuesday 14th July 2009 at 01:34:51
Avatar
Member
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 !!!


By Zéfling, the Tuesday 14th July 2009 at 07:45:18
Avatar
Administrator

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.
By Claymenia, the Tuesday 14th July 2009 at 13:42:52
Avatar
Member

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 ?


By Zéfling, the Tuesday 14th July 2009 at 13:55:13
Avatar
Administrator
CODE:

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

Et si tu utilises celle là ?


La plus grande consolation de la médiocrité, c'est que le génie n'est pas immortel.
By Claymenia, the Tuesday 14th July 2009 at 14:00:13
Avatar
Member

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

By Zéfling, the Tuesday 14th July 2009 at 14:43:20
Avatar
Administrator

Tu te sers de print_r ?

L'homme est le plus inhumain des animaux.
By Claymenia, the Friday 17th July 2009 at 13:24:55
Avatar
Member

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)

By Claymenia, the Sunday 19th July 2009 at 01:40:24
Avatar
Member

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

By Zéfling, the Tuesday 21th July 2009 at 15:42:30
Avatar
Administrator
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.

働いたら負け。