Je n'arrive pas à créer une numérotation dans un tableau array()

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 : Je n'arrive pas à créer une numérotation dans un tableau array()

par Sebe » 09 avr. 2008, 14:38

Salut ouckileou et merci d'avoir répondu à ma question,

De mon coté, j'ai continué à cherché et j'ai trouvé une piste de travail:
Le foreach utilise une copie du tableau à traiter.
Dans mon cas, j'ajoutes donc 'place' à la copie qui est supprimée à la fin de la boucle foreach ... c'est pour cela qu'il y a une place 'vide' !
Donc j'ai travaillé avec while(list() = each()){} et cela fonctionne ... je colle mon code au cas où il pourrait être amélioré:
$query = "SELECT id FROM #__classement_cat";
$database->setQuery( $query );
$categorie = $database -> loadAssocList();
if ($database -> getErrorNum()) {
	echo $database -> stderr();
	return false;
	}
$count_cat = count($categorie);

$query = "SELECT club_id, participant_id, annee, dossard, categorie_id, P1, P2, P3, pat, chal, nbre, points"
	. "\n FROM #__classement_palmares"
	. "\n WHERE annee = " . (int)$annee
	. "\n AND points > 0"
	. "\n ORDER BY points DESC"
	;
$database->setQuery( $query );
$generalList = $database->loadAssocList();

$key = count($generalList);

if($key > 0) { 
while(list($v) = each($generalList)){
	for ($k=0; $k<=$count_cat+1; $k++){
		if($categorie[$k][id] == $generalList[$v]['categorie_id']){
			$poscat[$k] ++;
			$pc = $poscat[$k];
			}// fin if
		}//fin for
	$generalList[$v]['pos_cat'] = $pc;
	$generalList[$v]['place'] = $v+1;
	}//fin foreach

	}//fin if($key > 0)

//purge classement_general en fonction de l'année
$query = "DELETE FROM #__classement_palmares"
	. "\n WHERE annee = '" . (int)$annee . "'"
	;
$database->setQuery( $query );
$database->query();

//Import dans palmares du général ordonné
foreach($generalList as $key => $runner){
$query = "INSERT INTO #__classement_palmares (place, club_id, participant_id, annee, dossard, categorie_id, pos_cat, P1, P2, P3, chal, pat, nbre, points)"
	. "\n VALUES (" . $generalList[$key]['place'] . ", ". $generalList[$key]['club_id'] .", ". $generalList[$key]['participant_id'].", ". $generalList[$key]['annee'].", ". $generalList[$key]['dossard'].", ". $generalList[$key]['categorie_id'].", ".$generalList[$key]['pos_cat'].", ".$generalList[$key]['P1'].", ".$generalList[$key]['P2'].", ".$generalList[$key]['P3'].", ". $generalList[$key]['chal'].", ".$generalList[$key]['pat'].", ".$generalList[$key]['nbre'].", ".$generalList[$key]['points'].");"
	;

$database->setQuery( $query );
$database->query();

if ($database -> getErrorNum()) {
	echo $database -> stderr();
	return false;
	}
	
	}//fin du foreach
Désolè de ne pas avoir répondu plus tot mais j'étais parti faire un tour :oops:

Merci

Re: Je n'arrive pas à créer une numérotation dans un tableau

par ouckileou » 09 avr. 2008, 14:25

mais le champs 'place' reste désespérément vide pour l'une des entrées !
Où ça, dans le tableau ou la base ?

Fais ça :
echo '<pre>';
print_r($tableau);
echo '</pre>';
pour vérifier que les données sont bonnes déjà.

Je n'arrive pas à créer une numérotation dans un tableau arr

par Sebe » 09 avr. 2008, 00:18

Bonjour,

J'ai un gros soucis de compréhension avec un tableau de type array(), je n'arrive pas à y ajouter un champs qui donnerait un ordre !

Je voudrais ordonner un tableau, y ajouter un champ place et enregistrer le tout dans une table écrite pour cela !
1. J'écris un tableau de type array en listant la table
$query = "SELECT club_id, participant_id, annee, dossard, categorie_id, P1, P2, P3, pat, chal, nbre, points"
	. "\n FROM #__classement_palmares"
	. "\n WHERE annee = " . (int)$annee
	. "\n AND points > 0"
	. "\n ORDER BY points DESC"
	;
$database->setQuery( $query );
$generalList = $database->loadAssocList();
$key = count($generalList);
2. J'ajoute des champs à ce tableau avec un foreach:
foreach($generalList as $key => $runner){
  for ($k=0; $k<=$count_cat+1; $k++){
    if($categorie[$k][id] == $generalList[$key]['categorie_id']){
	$poscat[$k] ++;
	$pc = $poscat[$k];
	}// fin if
  }//fin for
  $generalList[$key]['pos_cat'] =  $pc;
  }//fin foreach
for ($i=0; $i < $key; $i++){  
  $generalList[$i]['place'] = $i+1;        
  }
3. Je vérifie que le champs place est bien remplit
foreach($generalList as $key => $runner){
$query = "INSERT INTO #__classement_palmares (place, club_id, participant_id, annee, dossard, categorie_id, pos_cat, P1, P2, P3, chal, pat, nbre, points)" 
    . "\n (" . $generalList[$key]['place'] . " , ". $generalList[$key]['club_id'] .", ". $generalList[$key]['participant_id'].", ". $generalList[$key]['annee'].", ". $generalList[$key]['dossard'].", ". $generalList[$key]['categorie_id'].", ".$generalList[$key]['pos_cat'].", ".$generalList[$key]['P1'].", ".$generalList[$key]['P2'].", ".$generalList[$key]['P3'].", ". $generalList[$key]['chal'].", ".$generalList[$key]['pat'].", ".$generalList[$key]['nbre'].", ".$generalList[$key]['points'].");" 
    ;  	
print_r($generalList);
mais le champs 'place' reste désespérément vide pour l'une des entrées !

Quelqu'un peut-il me venir en aide ?
Merci