Puis je faire mieux que 'switch case' dans ce cas?

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 : Puis je faire mieux que 'switch case' dans ce cas?

par Sebe » 07 mars 2008, 00:28

Un grand merci
count() retourne le nombre d'elements d'un tableau.
Voici mon code:
$query = "SELECT id FROM #__classement_cat";
	$database->setQuery( $query );
	$categorie = $database -> loadAssocList();//loadObjectList();
	if ($database -> getErrorNum()) {
		echo $database -> stderr();
		return false;
		}

$count = count($categorie);

....
for ($k=0; $k<=$count+1; $k++){
		if($categorie[$k][id] == $claslist[$key]['cat_id']){
			$poscat[$k] ++;
			$pc = $poscat[$k];
			}
		}
	$claslist[$key]['poscat'] =  $pc;
Merci à tous

par h0_noMan » 06 mars 2008, 16:38

count() retourne le nombre d'elements d'un tableau.

par Sebe » 06 mars 2008, 11:11

Salut,

La nuit portant conseil, je suis parti sur quelque chose d'autres qui n'allonge pas mon code mais qui peut-être l'alourdit ... là vous me le direz !

J'ai donc fait une requête supplèmentaire pour lister toutes les catégories:
$query = "SELECT id"
	. "\n FROM #__classement_cat"
	;
	$database->setQuery( $query );
	$categorie = $database -> loadAssocList();
Et fait l'ajout d'un for() dans la boucle foreach():
foreach($claslist as $key => $clas){

	$claslist[$key]['nom'] = '<a href="' . $link . $clas['participant_id'] . '">' . $clas['nom'] . '</a>';
	$claslist[$key]['prenom'] = '<a href="' . $link . $clas['participant_id'] . '">' . $clas['prenom'] . '</a>';
	
	list($hour, $min, $sec) = explode(":", $clas['moyenne']);
	$claslist[$key]['moyenne'] = $min . ':' . $sec;
	
	for ($k=0; $k<100; $k++){
		if($categorie[$k][id] == $claslist[$key]['cat_id']){
			$poscat[$k] ++;
			$pc = $poscat[$k];
			}
		}
	$claslist[$key]['poscat'] =  $pc;
	}
J'ai juste un doute sur la variable $k qui pourrait être réduite au nombre de catégories différentes ... dans ce cas comment je dois faire ?

Merci

par d0m » 05 mars 2008, 16:29

Je ne suis pas sur mais essayes cela :

Remplaces ton switch par :
$variable = Array('a','b','c','d','e') ;

$poscat = (isset($($variable[$claslist[$key]->cat_id])))?++$($variable[$claslist[$key]->cat_id]):'';
Cela n'est pas très lisible par contre.
Le problème est que lorsque tu ajouteras une catégorie, il faudra modifier le tableau de variable.
Si déjà tu as des identifiants de catégorie numérique, autant les garder tout le long.

Tu crées le tableau de variables en l'initialisant à 0 pour toutes tes catégories au début de ton script avec une boucle sur les numéros de catégories.

par h0_noMan » 05 mars 2008, 16:16

Je ne suis pas sur mais essayes cela :

Remplaces ton switch par :
$variable = Array('a','b','c','d','e') ;

$poscat = (isset($($variable[$claslist[$key]->cat_id])))?++$($variable[$claslist[$key]->cat_id]):'';
Cela n'est pas très lisible par contre.

par d0m » 05 mars 2008, 15:49

je pense que tu peux faire cela de manière générique en utilisant les tableaux :

tu remplace les variables $a, $b,... $e par un tableau de variables $les_variables avec comme index le numéro de cas :
$a correspond à $les_variables[1];
...

et donc remplacer le case par une seule ligne de code

Puis je faire mieux que 'switch case' dans ce cas?

par Sebe » 05 mars 2008, 15:33

Bonjour,

J'ai trouvé une possibilité pour donner une position par catégorie dans un classement de course à pied en faisant ceci:
foreach($claslist as $key => $clas){
	$claslist[$key]->nom = '<a href="' . $link . $clas->participant_id . '">' . $clas->nom . '</a>';
	$claslist[$key]->prenom = '<a href="' . $link . $clas->participant_id . '">' . $clas->prenom . '</a>';
	
	switch ($claslist[$key]->cat_id){
		case '1':
			$a ++;
			$poscat = $a;
		break;
		
		case '2':
			$b ++;
			$poscat = $b;
		break;
		
		case '3':
			$c ++;
			$poscat = $c;
		break;
		
		case '4':
			$d ++;
			$poscat = $d;
		break;
		
		case '5':
			$e ++;
			$poscat = $e;
		break; 
		
		default:
			$poscat = '';
		break;
		}
	
	$claslist[$key]->poscat =  $poscat;
	}
Mes questions sont:
Etant donné que j'ai 15 catégories différentes est-ce que le 'switch case' est la meilleure idée ?
Il est possible qu'un jour il faille ajouter d'autres catégories dans la base de données, comment puis-je construire une boucle afin que cette nouvelles donnes soient prises en compte sans que je doivent replonger dans le code ?

Merci