Rechercher : dans
Par :

PHP - Array dans Array et incrémentation

Dernière réponse le 9 oct 2008 à 12:21:05 shadar, le 5 oct 2008 à 19:47:52 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « PHP Array dans Array et incrémentation » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

Gozmo, le 5 oct 2008 à 20:33:11

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

Répondre à Gozmo

2

shadar, le 5 oct 2008 à 21:03:08
  • +1

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
) 

Répondre à shadar

11

Gozmo, le 5 oct 2008 à 22:24:28

J'avais fais la mise en page chez moi aussi ;-)

Je continu à chercher de mon coté

Répondre à Gozmo

3

shadar, le 5 oct 2008 à 21:07:37

Je fourni la base de données, si ça peut aider / éclaircir.

-- phpMyAdmin SQL Dump
-- version 2.11.5
-- http://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);

Répondre à shadar

4

Mme Duchenot, le 5 oct 2008 à 21:24:35

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.

Répondre à Mme Duchenot

5

shadar, le 5 oct 2008 à 21:38:30
  • +1

C'est à dire ?

Répondre à shadar

6

Mme Duchenot, le 5 oct 2008 à 21:45:14

"Et bien "shadar".......mhhhhh????..

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


(:>)

Répondre à Mme Duchenot

8

shadar, le 5 oct 2008 à 21:52:53

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

Répondre à shadar

9

Mr Robert, le 5 oct 2008 à 22:08:31
  • +1

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....

Répondre à Mr Robert

10

shadar, le 5 oct 2008 à 22:23:21

ç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.

Répondre à shadar

7

Mme Duchenot, le 5 oct 2008 à 21:51:33

"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??...".


(:>)

Répondre à Mme Duchenot

12

pilou, le 5 oct 2008 à 22:38:51
  • +1

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+.

Répondre à pilou

14

shadar, le 6 oct 2008 à 08:06:02

Déjà, oui, ya un soucis pour compter la taille du tableau. merci !

Répondre à shadar

13

Mme Duchenot, le 6 oct 2008 à 06:26:44

"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."

______________________________________________________________________________________

(:>)

Répondre à Mme Duchenot

15

shadar, le 6 oct 2008 à 08:13:51

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.

Répondre à shadar

16

Alain_42, le 6 oct 2008 à 09:25:00

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....

}

}
}

Répondre à Alain_42

17

shadar, le 6 oct 2008 à 09:35:00

ça, ça me plait !

Je vais mettre ça en place tout de suite.

Merci beaucoup !

Répondre à shadar

18

pilou, le 6 oct 2008 à 20:51:57

Salut

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

Salutations.

Répondre à pilou

19

shadar, le 8 oct 2008 à 13:11:31

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.

Répondre à shadar

20

pilou, le 8 oct 2008 à 21:11:05

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.

Répondre à pilou

21

Alain_42, le 9 oct 2008 à 09:48:37

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

Répondre à Alain_42

22

 pilou, le 9 oct 2008 à 12:21:05

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."

Répondre à pilou