deplacement de valeur dans une array()

Moker
Invité n'ayant pas de compte PHPfrance

01 avr. 2005, 13:46

Bonjour,

je doit realiser un sondage en php mais etant debutant, je nage un peu ....

Mon sondage est en fait une liste de preference dont voici le code :

Code : Tout sélectionner

<?php $questionnaire = array(); $questionnaire['a) Les Séries'] = array(1 => 'Séries Américaines','Séries Francophones'); $questionnaire['b) Les Informations'] = array(1 => 'Informations internationales','Informations régionales'); $questionnaire['c) Les Clips Vidéos'] = array(1 => 'Clips musicaux d’artistes connus','Clips musicaux d’artistes méconnus'); $questionnaire['d) Les Films'] = array(1 => 'Films dramatiques','Films marrants','Films de sciences fictions','Films à suspenses','Films d’action','Films d’horreur'); $questionnaire['e) Les Documentaires'] = array(1 => 'Documentaires animaliers','Documentaires politiques','Documentaires sur la vie','Documentaires sur les événements inexpliqués de notre monde','Documentaires sur la science','Documentaires sur les sports connus','Documentaires sur les sports peu diffusés'); function afficher_tableau($questionnaire) { foreach ($questionnaire as $cle=>$valeur) { if(is_array($valeur)) { $titre = $cle; echo $titre.' : <ul>'; afficher_tableau($valeur); echo '</ul>'; } else { $indice = $cle; echo '<input type="submit" value="+" action=""> '.$indice.' => '.$valeur.' <br>'; } } } afficher_tableau($questionnaire); ?> <br>
Le but de ce dernier est de refenrencer par odre de preference les themes que les gens desirent regarder.

Mon probleme est que je n'arrive pas a deplacer ma valeur d'un cran vers le haut lors d'un clik sur le submit :(

J'ai trouver aussi ce bout de code qui m'as pas mal avancer :

Code : Tout sélectionner

function deplace_element ($tab_avant,$indice_avant,$indice_apres) { $agarder= array_splice($tab_avant,($indice_avant),1); $v=0; while ($v>-1) { if($v!=$indice_apres) $tab_temp[]=array_shift($tab_avant); else break; $v++; } array_unshift($tab_avant,$agarder[0]); $tab_apres = array_merge($tab_temp,$tab_avant); return($tab_apres); } $tableau=array('0','1','4','2','3','5','6'); $retour=deplace_element($tableau,2,4); echo "avant : "; foreach($tableau as $val) echo $val; echo "<br>Aprés : "; foreach($retour as $val) echo $val;
Malheureusement je comprend bien comment il fonctionne mais n'arrive pas a l'integrer correctement dans mon code

un peu d'aide serait la bienvenue, merci a vous.

Eléphant du PHP | 71 Messages

01 avr. 2005, 15:47

si j'ai mal expliquer une chose dite moi ce que c'est et je tenterait d'etre plus clair

merci de m'aider c'est trés important.

Mammouth du PHP | 19672 Messages

01 avr. 2005, 16:38

Salut,
bon, d'abord, la forme de ton tableau est pas bonne :
$questionnaire['a) Les Séries']
Fais tout simplement:
/* Les Séries */
$questionnaire['a']
Ensuite, essayer de faire des mouvements dans le tableau n'est peut-être pas la solution la plus simple : tes données, elles viennent d'où ? D'une base de données ? Si oui, il y a moyen de formuler une requête qui va te faire un tri et envoyer les données dans l'ordre voulu.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

01 avr. 2005, 17:27

merci cyrano pour ton up :wink:

pour la forme de mon tableau si je fait comme tu dit je ne pourrait plus utiliser $questionnaire['a) Les Séries'] comme titre pour ma liste :
<?
foreach ($questionnaire as $cle=>$valeur)  
        {
        if(is_array($valeur))
            {
            $titre = $cle;
            
            echo $titre.' : <ul>';
            
				afficher_tableau($valeur);
            
            echo '</ul>';
            }
        else 
            {
            $indice = $cle;
            echo 'Preference N°'.$indice.' : <input type="submit" value="+" action="<? plus1($questionnaire,1,2);?>"> => '.$valeur.' <br>';   
            }
        }
?>
qui retourne :

Code : Tout sélectionner

a) Les Series : 1 => Series Americaines 2 => Series Francophones
Puis pour la sources de mes données, elle ne viennent pas d'une base de donnée.

Je les declarent dans la array $questionnaire.

il faudrait que si la personne clik sur le bouton "+" devant series francophones, le nouveau clasement me retourne :

Code : Tout sélectionner

a) Les Series : 1 => Series Francophones 2 => Series Americaines
Merci de votre aide.

Mammouth du PHP | 19672 Messages

04 avr. 2005, 09:25

Salut,
personnellement, ce que je ferais, ce serait de récupérer les valeurs du tableau existant dans un ordre tel que celui souhaité, je le stocke dans un tableau temporaire et je recrée le tableau dans le nouvel ordre. Ça, c'est la théorie à première vue.

Ceci dit, quand tu crées un tableau, tu as un nom de variable et des noms d'index: ne pas les confoncdre avec les valeurs que chacune de ces identification représente: ainsi, tu peux déterminer que l'index "a" au premier niveau représente la valeur "Les séries" mais ça n'apparaîtra que dans le code qui sert à l'affichage dans ta page: Au second niveau, tu as 1 pour les séries francophone, 2 pour les sésries américaines: "1" et "2" sont les indexes, auxquels tu attribues des valeurs ("Série francophone", "Série américaine") tandis qu'au niveau précédent, tu n'attribues pas de valeur, l'index représente un tableau lui-même à l'intérieur du tableau $questionnaire.

Les effets d'affichage peuvent faire varier la manière de lire les données dans ton tableau, mais de là à inverser l'ordre des valeurs, je doute de l'intérêt : Rien ne t'empêche de rajouter une clé pour pouvoir créer un ordre croissant ou décroissant en fonction d'un clic ou d'un autre...

Ceci étant dit, si tu n'utilises pas de base de données, les mises à jour de ton code à long terme vont vite devenir laborieuses. On dirait que tu essayes de monter un système avec ordre de tri variable en cliquant sur un lien en haut d'une colonne de tableau: ça se fait très bien avec un tableau construit depuis une base, mais avec des tableaux virtuels, c'est une autre paire de manches...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 71 Messages

07 avr. 2005, 17:18

Salut,
personnellement, ce que je ferais, ce serait de récupérer les valeurs du tableau existant dans un ordre tel que celui souhaité, je le stocke dans un tableau temporaire et je recrée le tableau dans le nouvel ordre. Ça, c'est la théorie à première vue.
si je comprend bien ta demarche, il faut que je creer un tableau initial comme celui ci :
$question['films'] = array (1 => 'Films dramatiques','Films marrants','Films de sciences fictions',
'Films à suspenses','Films d’action','Films d’horreur');

foreach($question['films'] as $cle => $val)
	{
	echo $cle.' : <input type="submit" value="+">'.$val.'<br />';
	}
pour ensuite le tramsformer a l'aide d'un clik en :
$question['films'] = array (1 => 'Films dramatiques','Films marrants','Films de sciences fictions',
'Films à suspenses','Films d’horreur','Films d’action');

foreach($question['films'] as $cle => $val)
	{
	echo $cle.' : <input type="submit" value="+">'.$val.'<br />';
	}
c'est bien ce que je cherche a coder mais debutant en php je ne sait pas comment arriver a mes fins :cry:

si tu pouvez m'aiguiller un peu .......

merci d'avance.