plusieurs images aleatoires

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : plusieurs images aleatoires

Re: plusieurs images aleatoires

par dix2 » 02 juin 2012, 11:50

ok, j'ai compris
je ne pensais pas qu'il y avait un autre traitement par la suite
dans ce cas, ok pour les array_shift()

dix2

Re: plusieurs images aleatoires

par xTG » 02 juin 2012, 11:47

Pas pour un traitement ultérieur, à moins que tu gardes le dernier index tiré. ;)

Re: plusieurs images aleatoires

par dix2 » 02 juin 2012, 11:40

si on prend les 3 images $tab[0], $tab[1] et $tab[2], l'unicité est respectée

Re: plusieurs images aleatoires

par xTG » 02 juin 2012, 11:28

L'auteur du sujet a besoin d'unicité (peut être pas assez détaillé sur ce forum, la faute au multi-postage ça...), donc pour ne pas les retirer une seconde fois il faut bien les enlever du tableau. ;)

Re: plusieurs images aleatoires

par dix2 » 02 juin 2012, 11:21

en fait, je ne comprends pas pourquoi stocker les 3 images dans 3 variables $imageA, $imageB et $imageC
alors qu'on peut utiliser le tableau $tab directement avec $tab[0], $tab[1] et $tab[2]

dix2

Re: plusieurs images aleatoires

par xTG » 02 juin 2012, 10:38

Le array_slice est tout ce qui est inutile.
Je ne vois pas en quoi les trois autres instructions le sont.
Aurais-tu un benchmark pour prouver tes dires ? =P~

Re: plusieurs images aleatoires

par dix2 » 02 juin 2012, 10:23

salut,

les 4 lignes suivantes sont inutiles et alourdissent ton code :
$tab = array_slice($tab, 0, 3); // Garde les 3 premières images                               

$imageA = array_shift ( $tab ); // Pour chacune de mes div
$imageB = array_shift ( $tab );
$imageC = array_shift ( $tab );
Tu peux donc les enlever.
En conséquence de quoi, tu dois modifier le code d'insertion des images comme suit :
<div id="bandeau_banniere_flottante" style="display: block;">
    <div class="container_pub_flottante">
<?php
for ( $i = 0; $i < 3; $i++ ) {
    echo ( "<div id='pub_flottante_main_container_".$i."'>" );
    echo ( "<a href='' title='' alt=''><img src='images/" . $tab[$i] . "' alt='Random Image' /></a>" );
    echo ( "</div>" );
}
?>
    </div>
</div>
@+
dix2

Re: plusieurs images aleatoires

par louyoulou » 01 juin 2012, 10:46

Voila mon code, j'ai préféré la technique scandir parce que je n'avais pas le temps nécessaire pour me pencher sur le XML, cela fonctionne bien, pas de doublon et pas de soucis si j'ai 60 images ou 10, tout va bien. Je pense que je testerais avec le XML quand j'aurais plus de temps devant moi. Kny je te remercie beaucoup pour ton aide, car sans toi je serais encore à m'arracher les cheveux.

<?php
		$path = 'images/'; // chemin vers le dossier contenant tes images (ne pas oublier le slash final)
	$tab = scandir($path); // Place tes images dans un tableau
	$tab = array_slice($tab, 2); // J'avais oublier que scandir listait . et .. donc on les vires aussi
	shuffle($tab); // Mélange le tableau
	$tab = array_slice($tab, 0, 3); // Garde les 3 premières images				

    $imageA = array_shift ( $tab ); // Pour chacune de mes div
    $imageB = array_shift ( $tab );
    $imageC = array_shift ( $tab );
	
	?>

<div id="bandeau_banniere_flottante" style="display: block;">
		
		
				<div class="container_pub_flottante">
					<?php   echo    "<div id='pub_flottante_main_container_1'>" .
            "<a href='' title='' alt=''>" .
            "<img src='images/" . $imageA . "' alt='Random Image' />" .
            "</a>" .
            "</div>" ?>

Re: plusieurs images aleatoires

par kny » 31 mai 2012, 16:09

Avec plaisir!

Sinon j'oubliais:
Tu peux également exploiter les metadatas de tes fichiers images pour parvenir à un équivalent de "l'avantage XML", et ce en restant dans la lecture du dossier, SEULEMENT cela présume que tes fichiers soient de même encodage, car les extractions des metadatas sont différentes entre les .jpeg et les .png pour exemple.

Re: plusieurs images aleatoires

par louyoulou » 31 mai 2012, 16:01

Ok je te remercie, je vais me pencher sur la doc que tu m'as donné et je mettrais en ligne ce que j'aurais fait. Si j'ai un soucis je reviendrais vers toi.
En tout cas merci pour ton aide.

Re: plusieurs images aleatoires

par kny » 31 mai 2012, 15:53

Tu as plusieurs solutions:

- faire une lecture de ton dossier, et récupérer les noms de chaque fichier, et enfin les stocker dans ton tableau.
- écrire un fichier XML contenu dans ton dossier de photo qui va lister les fichiers, les urls, etc..., pour ensuite le parser avec php et stocker les données extraite dans ton tableau.
(comme l'avantage du XML n'est pas flagrant car cela présume que tu devras le modifier à chaque changements de ton dossier, cependant en voici un: tu pourras au travers du fichier XML préciser en plus des noms de fichiers (URI), des données complémentaires telles que le nom à afficher - différent donc du nom de fichier -, des descriptions, etc..., qui pourront éventuellement être utiliser dans la création de tes encarts publicitaires.)

Documentation:

- isdir() / scandir() de la documentation php
- références XML de la documentation php

Re: plusieurs images aleatoires

par louyoulou » 31 mai 2012, 15:46

Ok d'accord mais comment est ce que je le formule mon array avec un nombre de fichier indéfini? Parce que un jour je peux avoir 30 fichiers et le lendemain 20 fichiers dans mon dossier, et j'aimerais juste supprimer une image dans mon dossier pour qu'elle ne soit plus affichée, tu vois ce que je veux dire?

En gros il me faudrait un array(de image1 à image8000), parce que j'ai des photos avec des noms bien précis, et que les photos qui vont dans le dossier changent souvent. Si je fais un long array avec le nom de toutes mes images, ce sera la galère tous les jours pour modifier les photos qui ne sont plus d'actualité.

Désolée, je suis un peu casse-couille avec toutes mes questions, étant un débutant en PHP ça n'aide pas, mais tu m'es d'une grande aide et tu es un fin pédagogue kny.
Merci d'avance.

Re: plusieurs images aleatoires

par kny » 31 mai 2012, 15:14

Dans mon exemple j'ai précisé un array en dur de manière à pouvoir avoir un exemple concret fonctionnel.
Mais évidemment ton array peux être divers et varié!
Peu importe ce que contiendra ton array, et sa longueur.
<?php

    $myArray = // ce que tu veux, un array sorti d'une BDD, un array composé manuellement, etc...
    // Le reste du code ne change pas.
    // Si toutefois tu désires piocher plus de photos que les trois en exemple, et selon des données variables
    // exemple un coup 3, une autre fois, ce sera 5, utilises donc un tableau de résultat ^.^

    shuffle ( $myArray );

    $myResultArray = array();
    $numberOfResult = 5; // ta donnée variable

    for ( $i = 0; $i < $numberOfResult; $i++ ) {
    
        $myResultArray[$i] = array_shift ( $myArray );
        // ou
        // array_push ( $myResultArray, array_shift ( $myArray ) );

    }

    // ensuite tu récupères la valeur dans ton tableau.
    echo "<div class='container_pub_flottante'>" .
            "<div id='pub_flottante_main_container_1'>" .
            "<a href='' title='' alt=''>" .
            "<img src='images/" . $myResultArray[0] . ".jpg' alt='Random Image' />" .
            "</a>" .
            "</div>"

?>
Ou plus simplement,selon tes besoins...
Mais personnellement je préfère stocker mes valeurs piochées dans un tableau et les appeler par la suite ( cf.: méthode ci-dessus ), quitte à reprendre une boucle, pour pouvoir ré-accéder à mes valeurs en cas de besoin.
<?php

    $myArray = // ce que tu veux, un array sorti d'une BDD, un array composé manuellement, etc...
    shuffle ( $myArray );

    $numberOfResult = 5; // ta donnée variable

    for ( $i = 0; $i < $numberOfResult; $i++ ) {
    
        echo "<div class='container_pub_flottante'>" .
                "<div id='pub_flottante_main_container_" . $i . "'>" .
                "<a href='' title='' alt=''>" .
                "<img src='images/" . array_shift ( $myArray ) . ".jpg' alt='Random Image' />" .
                "</a>" .
                "</div>"

    }

?>

Re: plusieurs images aleatoires

par louyoulou » 31 mai 2012, 14:51

Génial, tu as tout compris, ton code marche bien merci.
Mais je vais cependant encore t’embêter kny ou un autre n'importe, mais j'ai un nombre de photo qui varie et leur nom aussi donc le array ( 'image1', 'image2', 'image3' ); c'est pas le top. Est ce qu'on peut faire un array sans donner le nom, ni le nombre d'élément, jusque là j'ai pas trouvé, est ce que quelqu'un saurait comment remplacer juste cela? Parce tout le reste c'est parfait.

Re: plusieurs images aleatoires

par kny » 31 mai 2012, 14:33

Tel que je lis ton code, tes images sont choisies chacune leur tour par un rand().
Ainsi, tu pioches une première fois dans ton tableau parmi toutes les images et tu écris dans une div, puis tu recommences l'opération sur le même nombre d'images...
Avec le shuffle et le shift, la démarche sera identique à une exception près:
Tu mélanges ton tableau, tu pioches une première images que tu supprimes de ton tableau et tu l'écris dans une div, mais quand tu vas repiocher la fois suivante, tu piocheras sur les images restantes...

Autrement dis:
<?php

    $myarray = array ( 'image1', 'image2', 'image3' );
    shuffle ( $myarray );
    
    $imageA = array_shift ( $myarray );
    $imageB = array_shift ( $myarray );
    $imageC = array_shift ( $myarray );

    // puis tu écris tes div de cette manière ou d'une autre.
    echo "<div class='container_pub_flottante'>" .
            "<div id='pub_flottante_main_container_1'>" .
            "<a href='' title='' alt=''>" .
            "<img src='images/" . $imageA . ".jpg' alt='Random Image' />" .
            "</a>" .
            "</div>"
?>