Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2011, 17h02   #1
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
Par défaut Parcourir un tableau

Bonjour,

j'ai créer une classe, dans cette classe, j'ai une variable que je déclare en tableau.

le problème est que je souhaite accéder à ce tableau depuis une function de cette classe mais j'ai une erreur
Citation:
Notice: Undefined variable: Tabinfo
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
<?php 
     class loadsheet 
     { 
          /** 
          * Déclaration des attributs 
          */ 
 
		//variable tableau
                public $Tabinfo;
          /** 
          * Cette méthode un peu spéciale est le constructeur, elle est exécutée lorsque vous "créez" votre objet. Elle doit initialiser les attributs de la classe.
          */ 
 
          public function __construct() 
          { 
 
          } 
 
          /** 
          * Première méthode accessible par tous et modifiant le niveau de carburant 
          */ 
 
 function affichetableau($Noeudparent,$Noeudfils)
		  {
				for($i=0;$i<sizeof($Tabinfo);$i++) // tant que $i est inferieur au nombre d'éléments du tableau...
				{ 
					echo $Tabinfo[$Noeudparent][$Noeudfils][i].'<br>'; // on affiche l'élément du tableau d'indice $i 
				} 		  
		  }
          /** 
          * Seconde méthode accessible à tous et modifiant le nombre de portes
          */ 
 
          public function LecturelistAHM($Noeudparent,$Noeudfils) 
          { 
				$Doc = new DomDocument();
				$Doc->load('ahm/AHM560_AF_CR1.xml');
				$messageNode = $Doc->getElementsByTagName($Noeudparent)->item(0);
				$i1=($messageNode->childNodes->length-1);
				$Tabinfo[$Noeudparent]=array();
 
				$j=0;
				$i1=$i1/2;
				while ($j<$i1){
					$messageSousNode = $messageNode->getElementsByTagName($Noeudfils)->item($j);
					$i2=($messageSousNode->childNodes->length-1);
					$k=0;
					while ($k<$i2){
						if ($k%2 == 1){
							$nodeValue = $messageSousNode->childNodes->item($k)->nodeValue;
							$localName = $messageSousNode->childNodes->item($k)->localName;
 
							$Tabinfo[$Noeudparent][$localName]=array();
							$position=array_search($nodeValue,$Tabinfo[$Noeudparent][$localName]);
							if($position!==false){
								$Tabinfo[$Noeudparent][$localName][$position]=$nodeValue;
							}					
							else{
								array_push($Tabinfo[$Noeudparent][$localName],$nodeValue);
							}
						}
						$k++;	
					}
					$j++;
				}
          } 
     } 
?>
merci de votre aide
Qays
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 17h14   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
En programmation orientée objet, il faut utiliser le mot clé $this pour accéder aux méthodes / proprités de l'objet:
Code :
1
2
3
4
5
6
7
8
9
10
class Exemple {
  protected $data = "hello";
 
  public function __construct () {
     $data = "world";
     echo "{$this->data} {$data}"; // affiche hello world
  }
}
 
$t = new Exemple();
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 18h24   #3
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
bonjour,

merci de votre réponse c'est ok
cependant je ne réussie pas à lire l'ensemble du tableau

Code :
1
2
3
4
5
6
7
foreach( $this->Tabinfo[$Noeudparent] as $key => $value ) 
{ 
echo $key . ': <br />'; 
foreach( $value as $valeur ) 
        echo '  ' . $valeur . '<br />'; 
echo '<br />'; 
}
sachant que mon tableau est comme suit:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
while ($j<$i1){
	$messageSousNode = $messageNode->getElementsByTagName($Noeudfils)->item($j);
	$i2=($messageSousNode->childNodes->length-1);
	$k=0;
	while ($k<$i2){
		if ($k%2 == 1){
		$nodeValue = $messageSousNode->childNodes->item($k)->nodeValue;
		$localName = $messageSousNode->childNodes->item($k)->localName;
 
		$Tabinfo[$Noeudparent][$localName]=array();
		$position=array_search($nodeValue,$Tabinfo[$Noeudparent][$localName]);
		if($position!==false){
			$Tabinfo[$Noeudparent][$localName][$position]=$nodeValue;
		}					
		else{
			array_push($Tabinfo[$Noeudparent][$localName],$nodeValue);
		}
	}
	$k++;	
}
$j++;
}
j'alimente mon tableau avec un fichier xml dont voici une petite partie

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<FUELINFO>
		<FUEL>
			<Weigth_fuel>0</Weigth_fuel>
			<density>0,785</density>
			<Index_fuel>0</Index_fuel>
		</FUEL>
		<FUEL>
			<Weigth_fuel>200</Weigth_fuel>
			<density>0,785</density>
			<Index_fuel>-0,82</Index_fuel>
		</FUEL>
		<FUEL>
			<Weigth_fuel>400</Weigth_fuel>
			<density>0,785</density>
			<Index_fuel>-1,54</Index_fuel>
		</FUEL>
</FUELINFO>
normalement le résultat de d'alimentation du tableau devrait être comme ci-dessous:
Citation:
occurence 0
Tabinfo['FUELINFO']['Weigth_fuel'][0]=0
Tabinfo['FUELINFO']['density'][0]=0,785
Tabinfo['FUELINFO']['Index_fuel'][0]=0

occurence 1
Tabinfo['FUELINFO']['Weigth_fuel'][1]=200
Tabinfo['FUELINFO']['density'][1]=0,785
Tabinfo['FUELINFO']['Index_fuel'][1]=-0.82

occurence 2
Tabinfo['FUELINFO']['Weigth_fuel'][2]=400
Tabinfo['FUELINFO']['density'][2]=0,785
Tabinfo['FUELINFO']['Index_fuel'][2]=-1.54
etc...
avec l'exemple ci-dessous, je ne reussi à lire que le dernier éléments

merci
Qays
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 18h32   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Alors ça veut dire qu'un seul élément est inséré. Regarde le contenu de ton tableau avec:
Code :
var_dump($this->Tabinfo[$Noeudparent]);
Question subsidiaire: quel est l'intérêt de mapper une structure XML sur un tableau au juste ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 18h43   #5
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
vous avez raison mon tableau n'a qu'une seule ligne, ma partie alimentation est mauvaise je vais revoir ma copie


pour l'utilisation du tableau, est que j'ai pour idée (peut être mauvaise) que l'accès à un tableau en mémoire sera plus rapide que l'accès à mon fichier xml

ais-je raison ?
Merci
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 10h37   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Citation:
Envoyé par QAYS Voir le message
pour l'utilisation du tableau, est que j'ai pour idée (peut être mauvaise) que l'accès à un tableau en mémoire sera plus rapide que l'accès à mon fichier xml

ais-je raison ?
La consommation mémoire sera plus grande (copie intégrale de l'arbre) mais effectivement, si l'arbre est souvent sollicité, ce sera certainement plus rapide avec un tableau qu'avec un objet DOMDocument. En revanche tu perds la possibilité d'effectuer des requêtes XPath avec des tableaux.


Par ailleurs tu devrais mettre un système de cache pour éviter de devoir parcourir l'arbre à chaque requête.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h28   #7
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
bonjour,

merci de votre réponse, vous m'avez parler de cache, pouvez-vous me communiquer un lien ou m'en dire un peu plus,

en fait voila une semaine que je fais du php, donc je ne suis pas trop au fait de toutes les possibilités de php

Cordialement
Qays
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h35   #8
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par QAYS Voir le message
merci de votre réponse, vous m'avez parler de cache, pouvez-vous me communiquer un lien ou m'en dire un peu plus,
Salut,

tu peux utiliser APC, memcache(d) ou bien serializer l'objet.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 18h19   #9
Membre habitué
 
Inscription : août 2004
Messages : 541
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 541
Points : 118
Points : 118
bonjour,

je me permets de revenir vers vous pour savoir si vous avez une idée de ce qui ne va pas dans mon code pour empécher une alimentation correcte de mon tableau

en effet il alimente une seule ligne pourtant en faisant un echo j'ai bien toute les ligne de mon fichier xml (celles dont j'ai besoin)

cordialement
QAYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h29.


 
 
 
 
Partenaires

Hébergement Web