PHP - Array dans Array et incrémentation

Résolu/Fermé
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 - 5 oct. 2008 à 19:47
 pilou - 9 oct. 2008 à 12:21
Bonsoir,
dans une boucle, après une requête SQL, je regroupe chaque critères dans un même tableau qui contient des tableaux du coup. le soucis c'est que je nomme ces différents tableaux avec leur nom et je veux les appeler avec une boucle incrémentée, et ça me retourne rien.

Vous comprendrez mieux avec le code :

<?php
$date_D = $_GET['Dannee'].'-'.$_GET['Dmois'].'-'.$_GET['Djour'].' 00:00:00';
$date_F = $_GET['Fannee'].'-'.$_GET['Fmois'].'-'.$_GET['Fjour'].' 23:59:59';
$demande = mysql_query("SELECT *
			FROM client C, travaux T, type Y, sous_type ST, taxe X
			WHERE T.id_client = C.id_client
			AND T.id_type = Y.id_type
			AND T.id_sstype = ST.id_sstype
			AND Y.id_taxe = X.id_taxe
			AND C.nomClient = '".$_GET['nom']."'
			AND T.date_D > '".$date_D."'
			AND T.date_D < '".$date_F."'
			ORDER BY Y.id_type ASC");
while($donnees = mysql_fetch_assoc($demande))
{
	if($donnees['facturable'] == '1')
	{
		$type[2][$donnees['Tdesignation']]['prix_h'] = $donnees['prix_h'];
		$type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['sous-type'] = $donnees['STdesignation'];
		$type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['nbr_min'] += $donnees['nbr_min'];
		$type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['montant_HT'] = ($type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['nbr_min']/60) * $donnees['prix_h'];
		$type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['montant_TTC'] = $type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['montant_HT'] * (1 + $donnees['taux']/100);
	}
	else
	{
		$type[0][$donnees['Tdesignation']][$donnees['STdesignation']]['sous-type'] = $donnees['STdesignation'];
		$type[0][$donnees['Tdesignation']][$donnees['STdesignation']]['nbr_min'] += $donnees['nbr_min'];
	}
}
$nbr_type[1] = count($type[1]);
$nbr_type[0] = count($type[0]);
echo "<table>";
while($i <= $nbr_type[1])
{
	echo $type[1][$i]." (".$type[2][$i]['prix_h']." &euro; HT / h)";
	echo "<tr>
			<td>Sous-type</td>
			<td>Nbr heures</td>
			<td>Montant HT</td>
			<td>Montant TTC</td>
		 </tr>";
	$nbr_sstype = $type[1][$i];
	$y = 0;
	$sstotal_HT = 0;
	$sstotal_TTC = 0;
	while($y <= $nbr_sstype)
	{
		echo "<tr>
				<td>".$type[1][$i][$y]['sous-type']."</td>
				<td>".transformeDuree($type[1][$i][$y]['nbr_min'])."</td>
				<td>".$type[1][$i][$y]['montant_HT']." &euro</td>
				<td>".$type[1][$i][$y]['montant_TTC']." &euro</td>
			</tr>";
		$sstotal_HT += $type[1][$i][$y]['montant_HT'];
		$sstotal_TTC += $type[1][$i][$y]['montant_TTC'];
		$y++;
	}
	echo "<tr>
			<td>Total</td>
			<td>".$sstotal_HT." &euro</td>
			<td>".$sstotal_TTC." &euro</td>
		</tr>";
	$total_HT += $sstotal_HT;
	$total_TTC += $sstotal_TTC;
	$i++;
}
echo "</table>";
?>


Alors quand, dans le première boucle, je fais un

echo $type[1][$donnees['Tdesignation']][$donnees['STdesignation']]['sous-type'|'nbr_min'|'montant_HT'|'montant_TTC']

ou même un
print_r($type);
print_r($type[1]);


j'obtiens bien un résultat non NULL, mais si je fais un

echo $type[1][1]
echo $type[1][1][1]


et plus, j'ai rien.

Quelqu'un aurait une explication ? une solution ?

Merci
A voir également:

10 réponses

Mme Duchenot
6 oct. 2008 à 06:26
"Et zarma!!... p'tain la vioque trop chelou k'elle aille se faire foncdé quoi comment elle nous parle elle !!!!....

Silence..!!!!...

Alors continuez comme ca mes petits bonhommes et vous n'aurez surement pas votre baccalauréat à la fin de l'année.
Quant à mon petit "shadar" un langage comme le PHP qui permet de manipuler des tableaux sans dimensions déclarées, jamais initialisées et dans lesquels on se permet de mettre n'importe quoi à n'importe quel endroit ce n'est pas bien et ce n'est absolument pas ce que je vous ai enseigné tout au long de l'année.
Continuez comme ca "shadar" et vous finirez chômeur ou pire vous irez travailler dans l'informatique pour pondre de la ligne de mauvaise qualité au sein d'une DSI d'un douteux groupe bancaire en région parisienne travaillant pour le compte de traders verreux qui utiliseront vos logiciels et qui à cause de la mauvaise qualité de votre travail détourneront malgré eux des milliards d'euros d'argent sale ce qui provoquera des kraks boursiers internationaux qui déstabiliseront les marchés, provoqueront des conflits au moyen orient et tout finira dans la 3ème guerre mondiale ou nous mourront sous le feu nucléaire tous à cause d'un "shadar" qui n'a pas voulu travailler à l'école...
Un rapport qui utilise un tel langage de seconde main comme PHP... vous savez ce que j'en fait "shadar"..???...?? mmmhhh..??... et bien je le prends, je le froisse et je le met directement à la poubelle...voilà et silence dans les rangs.
Alors je ne vous conseillerai trop d'utiliser une plateforme gratuite de développement de qualité et de manipuler un langage objet évolué comme Java si vous ne voulez pas tous mourir un matin irradiés et gelés par l'hiver nucléaire."

Regagnez votre place "shadar" - je maintiens votre note initiale et je me permettrai d'alerter monsieur le Proviseur pour envisager de convoquer vos parents."

______________________________________________________________________________________

(:>)
7
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
6 oct. 2008 à 08:13
D'une, j'ai une application à faire en PHP et non en Java,
De deux, vos remarques sont pas constructive, merci quand même pour vos efforts.
De trois, j'ai pas l'intention de bosser dans une compagnie douteuse à Paris, j'ai d'autres projets et ambitions !
De quatre, je suis pas votre élève et aucun prof de programmation, dans le milieu scolaire, ne m'a appris quoi que ce soit. Non pas que je suis pas attentif mais qu'ils ont été quelque peu incompétents (et j'ai pas été le seul à le penser et le dire).

Par contre, si jamais une idée lumineuse vous viens à l'esprit ou un conseil qui pourrait m'être utile (autre que l'utilisation d'un autre langage ou outils extérieur), je serai à votre écoute.

Merci.
-1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894 > shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009
6 oct. 2008 à 09:25
Pour être plus constructif

Vas voir du côté de la boucle

if(sizeof($ton_array)>0){
foreach($ton_array as $cle=>$value){
//la tu balaye tout le premier niveau $cle= nom de l'index $value=sa valeur
//pour balayer le niveau suivant
if(sizeof($ton_array[$cle])>0){

foreach($ton_array[$cle] as $cle2=>$value2)
//la tu balaye le niv 2 avec $cle2 les index niv2 et $value2 leurs valeurs

//etc....

}

}
}
0
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4 > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
6 oct. 2008 à 09:35
ça, ça me plait !

Je vais mettre ça en place tout de suite.

Merci beaucoup !
-1
Mme Duchenot
5 oct. 2008 à 21:24
Et bah...

Vous n'avez point honte de gérer ainsi des tableaux ... ???..
Mais k'est c'ki vous ont fait ces tableaux ???....mmmh???...ce n'est pas bien.

Allez 4/20 et c'est mon dernier mot... regagnez votre place.
2
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
5 oct. 2008 à 21:38
c'est à dire ?
0
Mme Duchenot
5 oct. 2008 à 21:45
"Et bien "shadar".......mhhhhh????..

Vous n'initialisez pas $i "shadar"...??....par exemple ...et quelle est la dimension réelle de $type "shadar"..."


(:>)
1
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
5 oct. 2008 à 21:52
Dans mon fichier la variable $i est initialisée, j'ai juste oublié de le préciser dans ce que j'ai fourni. dsl
Pour ce qui est de la dimension réelle de $type ... jamais précisée ... :s
-1
Mr Robert > shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009
5 oct. 2008 à 22:08
Allors !!!.

Vérifiez déja ce que retournent toutes les variables qui vous servent d'indices pour la construction de votre tableau mon "shadar" !!...


Par exemple - $donnees['Tdesignation'] .... etc....
0
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4 > Mr Robert
5 oct. 2008 à 22:23
ça c'est fait, dans la boucle en me servant de $type[donnees['...']] tout est bon.
c'est quand j'utilise $type[1][$i] qui ça plante.
-1
Mme Duchenot
5 oct. 2008 à 21:51
"Et bien "shadar".....mmmmhhh..????

Par exemple "shadar" .... $type[2][$donnees['Tdesignation']]['prix_h'] = $donnees['prix_h'] ... je ne vous ai jamais appris une telle horreur pendant l'année "chadar"....vous étiez gentiment calé prés du radiateur, vous vous réveillez et vous vous permettez de m'écrire de telles horreurs "shadar"??.... mmhhh???.... quelle est la dimension de $type je vous prie??...".


(:>)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hello..

Ce serait pas ca déjà ???.. :

$nbr_sstype = $type[1][$i] à modifier par $nbr_sstype = count($type[1][$i]) ?...

C'est quand même bizarre que t'arrives pas à parcourir ton tableau avec des indices incrémentés - je vais me renseigner.

A+.
0
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
6 oct. 2008 à 08:06
déjà, oui, ya un soucis pour compter la taille du tableau. merci !
-1
salut

A tu pu résoudre ton problème avec les informations que t'a donné Alain_42 ???...

Salutations.
0
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
8 oct. 2008 à 13:11
oui oui, au début non, mais j'ai voulu introduire ce systeme dans la première boucle et au final j'ai recréé un tableau qui contient les valeurs numérique des entrées de chaque sous-tableau :

$arr_num[1][$i][$y] = $donnees['la_valeur'];

print_r($arr_num[1])
= ([1] => 'Suivi J.A', etc)

ce qui permet d'avoir un tableau que je peux appeller avec des incréments, ce qui apparemment n'était pas possible en nommant les sous-tableau avec des chaines de caractère.
-1
Salut

oui parcque avec un truc comme $type[2][$donnees['Tdesignation']]['prix_h'] = $donnees['prix_h']; bah t'avais l'air de manipuler bizarrement tes tableaux au niveau des indices quand même.
les arrays n'acceptent que des entiers comme indices et rien d'autres mai jai compris ta logique de l'époque.
cest marrant que PHP t'a laissé compiler ce truc.

Elle avait pas completement faux ta prof. en disant que t'y mettais n'importe quoi n'importe ou comme ca mais bon.

Salut.
Pilou.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 oct. 2008 à 09:48
Pilou

les arrays n'acceptent que des entiers comme indices et rien d'autres

non les array en php acceptent comme clé (index) des chaines

array associatifs
-1
Oui peut etre

Mais comme ca c'est plus propre.
Je metonne qu'on puisse mettre n'importe quel type de donnée (entier, char etc...) dans un seul tableau en PHP.
Et de tout manière nous n'avions aucune solution :


"ce qui permet d'avoir un tableau que je peux appeller avec des incréments, ce qui apparemment n'était pas possible en nommant les sous-tableau avec des chaines de caractère."
0
Gozmo Messages postés 79 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 13 septembre 2012
5 oct. 2008 à 20:33
Bonsoir,

Pourrais tu donner un exemple de ce que donne les
print_r($type);
print_r($type[1]);

ainsi qu'un
print_r($donnees);

Cela fait un petit moment que je n'ai pas mis le nez dans du php, j'ai un peu de mal à voir la structure des variables.

Merci
-1
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
5 oct. 2008 à 21:03
print_r($type) =

Array (
      [2] => Array ( 
                      [Suivi J.A] => Array (
                                   [prix_h] => 20
                                    )
                      [Autre] => Array (
                               [prix_h] => 20 
                               ) 
      ) 
      [1] => Array (
                [Suivi J.A] => Array (
                             [Suivi individuel] => Array ( 
                                                  [sous-type] => Suivi individuel 
                                                  [nbr_min] => 240 
                                                  [montant_HT] => 80 
                                                  [montant_TTC] => 95.68 
                                                  )
                             ) 
                 [Autre] => Array ( 
                           [Demande renseignements] => Array ( 
                                                   [sous-type] => Demande renseignements 
                                                   [nbr_min] => 60
                                                   [montant_HT] => 20
                                                   [montant_TTC] => 23.92
                                                   )
                           ) 
      ) 
) 



print_r($type[1]) =

Array ( 
[Suivi J.A] => Array ( 
             [Suivi individuel] => Array (
                                  [sous-type] => Suivi individuel 
                                  [nbr_min] => 240 
                                  [montant_HT] => 80 
                                  [montant_TTC] => 95.68 
                                  ) 
             )
[Autre] => Array ( 
            [Demande renseignements] => Array ( 
                                  [sous-type] => Demande renseignements 
                                  [nbr_min] => 60 
                                  [montant_HT] => 20 
                                  [montant_TTC] => 23.92 
                                  )
           ) 
) 


la première sortie dans la boucle d'initialisation de print_r($donnees) =

Array (
  [id_client] => 2
  [nomClient] => M. Hughes 
  [id] => 1 
  [id_agent] => 1 
  [date_d] => 1999-03-02 08:00:00
  [nbr_min] => 240 
  [id_type] => 1
  [id_sstype] => 1 
  [Tdesignation] => Suivi J.A
  [prix_h] => 20 
  [id_taxe] => 3
  [facturable] => 1
  [STdesignation] => Suivi individuel 
  [taux] => 19.6
) 
0
Gozmo Messages postés 79 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 13 septembre 2012 > shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009
5 oct. 2008 à 22:24
J'avais fais la mise en page chez moi aussi ;-)

Je continu à chercher de mon coté
-1
shadar Messages postés 26 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 4 septembre 2009 4
5 oct. 2008 à 21:07
Je fourni la base de données, si ça peut aider / éclaircir.

-- phpMyAdmin SQL Dump
-- version 2.11.5
-- https://www.phpmyadmin.net/
--
-- Serveur: localhost
-- Généré le : Dim 05 Octobre 2008 à 21:04
-- Version du serveur: 5.0.51
-- Version de PHP: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `tempstravaux`
--

-- --------------------------------------------------------

--
-- Structure de la table `agent`
--

CREATE TABLE `agent` (
  `id_agent` int(11) NOT NULL auto_increment,
  `nomAgent` varchar(25) NOT NULL,
  PRIMARY KEY  (`id_agent`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `agent`
--

INSERT INTO `agent` (`id_agent`, `nomAgent`) VALUES
(1, 'M. Fegnoux'),
(2, 'M. Duval');

-- --------------------------------------------------------

--
-- Structure de la table `client`
--

CREATE TABLE `client` (
  `id_client` int(11) NOT NULL auto_increment,
  `nomClient` varchar(25) NOT NULL,
  PRIMARY KEY  (`id_client`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Contenu de la table `client`
--

INSERT INTO `client` (`id_client`, `nomClient`) VALUES
(1, '&nbsp;'),
(2, 'M. Hughes'),
(3, 'M. Goury');

-- --------------------------------------------------------

--
-- Structure de la table `sous_type`
--

CREATE TABLE `sous_type` (
  `id_sstype` int(11) NOT NULL auto_increment,
  `STdesignation` varchar(25) NOT NULL,
  PRIMARY KEY  (`id_sstype`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

--
-- Contenu de la table `sous_type`
--

INSERT INTO `sous_type` (`id_sstype`, `STdesignation`) VALUES
(1, 'Suivi individuel'),
(2, 'Au bureau'),
(3, 'Chez l''adh&eacute;rent'),
(4, 'Demande renseignements'),
(5, 'Actualit&eacute;s'),
(6, 'Fiche de gestion'),
(7, 'D&eacute;pannage t&eacute');

-- --------------------------------------------------------

--
-- Structure de la table `taxe`
--

CREATE TABLE `taxe` (
  `id_taxe` int(11) NOT NULL auto_increment,
  `taux` float NOT NULL,
  PRIMARY KEY  (`id_taxe`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Contenu de la table `taxe`
--

INSERT INTO `taxe` (`id_taxe`, `taux`) VALUES
(1, 2.1),
(2, 5.5),
(3, 19.6);

-- --------------------------------------------------------

--
-- Structure de la table `travaux`
--

CREATE TABLE `travaux` (
  `id` int(11) NOT NULL auto_increment,
  `id_agent` int(11) NOT NULL,
  `date_d` datetime NOT NULL,
  `nbr_min` int(11) NOT NULL,
  `id_type` int(11) NOT NULL,
  `id_sstype` int(11) NOT NULL,
  `id_client` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Contenu de la table `travaux`
--

INSERT INTO `travaux` (`id`, `id_agent`, `date_d`, `nbr_min`, `id_type`, `id_sstype`, `id_client`) VALUES
(1, 1, '1999-03-02 08:00:00', 240, 1, 1, 2),
(2, 1, '1999-03-02 14:00:00', 60, 5, 4, 2),
(3, 1, '1999-03-02 15:00:00', 180, 2, 2, 3),
(4, 1, '1999-03-03 08:00:00', 150, 1, 1, 3),
(5, 1, '1999-03-03 10:30:00', 105, 3, 5, 1),
(6, 1, '1999-03-03 13:30:00', 270, 4, 6, 1);

-- --------------------------------------------------------

--
-- Structure de la table `type`
--

CREATE TABLE `type` (
  `id_type` int(11) NOT NULL auto_increment,
  `Tdesignation` varchar(25) NOT NULL,
  `prix_h` int(11) NOT NULL,
  `id_taxe` int(11) NOT NULL,
  `facturable` int(11) NOT NULL,
  PRIMARY KEY  (`id_type`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Contenu de la table `type`
--

INSERT INTO `type` (`id_type`, `Tdesignation`, `prix_h`, `id_taxe`, `facturable`) VALUES
(1, 'Suivi J.A', 20, 3, 1),
(2, 'Comptabilit&eacute;', 15, 3, 1),
(3, 'Lecture / autoformation', 0, 3, 0),
(4, 'M&eacute;thodologie', 0, 3, 0),
(5, 'Autre', 20, 3, 1),
(6, 'Maintenance logiciel', 0, 3, 0);

-1