Somme tableau mutlidimensionnel

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 : Somme tableau mutlidimensionnel

Re: Somme tableau mutlidimensionnel

par two3d » 07 déc. 2015, 16:31

Son tableau set certes pas lisible mais est toutes fois navigable avec un foreach, du style:

Code : Tout sélectionner

<?php $ci=array(); $ci['f']['h'][1] = 17; $ci['f']['f'][1] = 12; $ci['d']['h'][1] = 42; $ci['d']['f'][1] = 31; $ci['f']['h'][2] = 11; $ci['f']['f'][2] = 32; $ci['d']['h'][2] = 6; $ci['d']['f'][2] = 2; $Params=array(); $Params['fr-homme-1']=0; $Params['fr-homme-2']=0; $Params['fr-femme-1']=0; $Params['fr-femme-2']=0; $Params['de-homme-1']=0; $Params['de-homme-2']=0; $Params['de-femme-1']=0; $Params['de-femme-2']=0; foreach($ci as $dim => $val){ //Français: if($dim=='f'){ if(isset($val['h'])){//homme: //1er année: if(isset($val['h'][1])) $Params['fr-homme-1']+=$val['h'][1]; //2eme année: if(isset($val['h'][2])) $Params['fr-homme-2']+=$val['h'][2]; } if(isset($val['f'])){//femme: //1er année: if(isset($val['f'][1])) $Params['fr-femme-1']+=$val['f'][1]; //2eme année: if(isset($val['f'][2])) $Params['fr-femme-2']+=$val['f'][2]; } } //Allemand: if($dim=='d'){ if(isset($val['h'])){//homme: //1er année: if(isset($val['h'][1])) $Params['de-homme-1']+=$val['h'][1]; //2eme année: if(isset($val['h'][2])) $Params['de-homme-2']+=$val['h'][2]; } if(isset($val['f'])){//femme: //1er année: if(isset($val['f'][1])) $Params['de-femme-1']+=$val['f'][1]; //2eme année: if(isset($val['f'][2])) $Params['de-femme-2']+=$val['f'][2]; } } } var_dump($Params); ?>
je sais que c'est pas bien de mettre la solution direct mais si il demande en même temps c'est qu'il ne trouve pas donc voici la solution, j'espère qu'elle te conviendra :wink:

Re: Somme tableau mutlidimensionnel

par @rthur » 02 déc. 2015, 11:19

Te serait il possible de changer la structure de ton tableau ?
$tab[] = array('langue' = 'd', 'sexe' => 'h', 'année' => 1, 'nombre' => 32);
+1, ça serait plus lisible et ça rendrait ton code + facilement maintenable quand tu auras besoin de te replonger dedans dans quelques mois ou années ^^

Re: Somme tableau mutlidimensionnel

par Spols » 02 déc. 2015, 11:09

Te serait il possible de changer la structure de ton tableau ?
$tab[] = array('langue' = 'd', 'sexe' => 'h', 'année' => 1, 'nombre' => 32);
Ensuite pour tes statistiques, tu boucle ton tableau et selon quelques conditions logiques tu additionnes tes "nombre"

Re: Somme tableau mutlidimensionnel

par chanezb » 02 déc. 2015, 08:27

Merci pour ta réponse.

Le truc c'est que je fais du temps réel (sans actualisation toutefois), alors le stockage dans une db me semblait être une étape en trop. Je suis en train de voir ce que je peux faire avec JMESPath, ça a l'air pas mal, mais j'en suis au stade de la découverte. Sinon, c'est clairement la db qui sera la meilleure solution.

Re: Somme tableau mutlidimensionnel

par @rthur » 01 déc. 2015, 11:02

Bonjour,

La solution la plus simple à mon sens c'est de mettre ces infos dans une base de données que tu pourras alors requêter bcp + facilement et tu disposeras de toutes les fonctions mathématiques utiles pour sortit toutes tes statistiques.

A défaut, tu va être obligé de coder des fonctions PHP pour chaque type de stats qui vont parcourir tes tableaux à chaque fois pour ne garder que les valeurs qui t'intéressent et effectuer le calcul. C'est plus complexe et beaucoup moins flexible qu'une base de données, à mon sens.

Somme tableau mutlidimensionnel

par chanezb » 01 déc. 2015, 00:35

Bonjour,

Je suis nouveau sur phpFrance. En général, j'arrive à me débrouiller pour trouver des solutions avec google-est-ton-ami, mais là, je pèche et je me dis qu'il devrait y avoir un système simple pour répondre à mon problème.

Voici le principe. J'ai un tableau multidimensionnel qui stocke des statistiques concernant des élèves dans une école, dont voici un exemple :

$ci['f']['h'][1] = 17
$ci['f']['f'][1] = 12
$ci['d']['h'][1] = 42
$ci['d']['f'][1] = 31
$ci['f']['h'][2] = 11
$ci['f']['f'][2] = 32
$ci['d']['h'][2] = 6
$ci['d']['f'][2] = 2

La première clé indique la langue (f=français, d=allemand), la deuxième le sexe (h=homme, f=femme), la troisième l'année scolaire (1 ou 2).

J'aimerai calculer beaucoup de statistiques depuis ces informations, dont par exemple :

La somme des femmes de toutes les langues et toutes les années : array_sum($ci[...]['f'][...]), où les ... représentent n'importe quelle variable dans mon tableau.
La somme de toutes les francophones : array_sum($ci['f'][...][...])
La somme de tous les francophones de 2e année : array_sum($ci['f'][...][2])

Y a-t-il une possibilité de faire ça de manière simple ?

Merci d'avance pour vos conseils avisés. :-)
Bertrand