rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

[Php] Construction de tableaux

Xandler, le jeudi 26 avril 2007 à 13:51:11
Bonjour à tous, voilà mon soucis :
Je souhaite récupérer dans mon tableau $tab les variables $var et leur valeurs correspondent $val !
Voici mon bout de code :

try {

$retourR=$connexion->read();
echo "Résultat de la requete : $retourR";
$res=$retourR;
$array_res=explode("\n",$res);
$i = 0;
$tab=array();
while ($i<count($array_res)) {
if (strncmp($array_res[$i],"$",1)==0 || strncmp($array_res[$i],"[",1)==0) {
if (strncmp($array_res[$i],"$",1)==0) //compare deux chaines de caractères sur une longueur de 1.
{
$var = substr( $array_res[$i] , 1 , strlen($array_res[$i]));
$i++;
}
if (strncmp($array_res[$i],"[",1)==0)
{
$val = substr( $array_res[$i] , 3 , strlen($array_res[$i]));
$i++;
}
echo "valeur de ".$var." = ".$val;
//tableau du découpage des résultats
}
else
$i++;
}

Le problème, c'est que je ne vois pas comment faire correspondre une variable avec plusieurs valeurs ! bref, je galère !
Avez vous une suggestion à me proposer svp ?
Merci d'avance
Configuration: Linux Fedora
Firefox 1.5.0.7
Répondre à Xandler  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedElid, le jeudi 26 avril 2007 à 14:21:55
Bonjour,

Peux-tu nous donner un exemple du contenu de $retourR.

merci,

MedELID
Répondre à MedElid

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le jeudi 26 avril 2007 à 14:37:20
Bien sûr, en fait $retour constitue un fichier genre .txt qui est la sortie buffer d'une fonction écrite sous le langage R.
En voici un exemple :
------------------
$statistiqueShapiro
[1] 0.571231 0.6485

$alpha
[1] 0.05

$conclusion
[1] "Le graphique représente donc le nuage de points correspondant aux valeurs observées associé à la droite caractéristique de la loi normale. On pourra conclure que si le nuage semble suivre la droite, alors l'échantillon suivra une loi normale ! Aussi, le test de Shapiro-Wilk permet de comparer les valeurs observées à la loi normale. Cette valeur indique que plus celle-ci est proche de 1 alors plus la distribution sera normale. Ainsi, si cette valeur de test est supérieure au seuil alpha, on suivra alors une loi normale !"

$verdict
[1] "On en déduit que l'on suit donc bien une loi normale"
---------------------

En fait je voudrais réunir les valeurs $val=0.571231 et $val=0.6485 dans la variable $var=statistiqueShapiro. Et tout ça dans un tableau !
Est ce possible ? Merci
Répondre à Xandler

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le jeudi 26 avril 2007 à 15:03:38
Donc voici ce que je te propose
<?php

//Un exemple
$res=    "\$statistiqueShapiro\n" .
    "[1] 0.571231 0.6485 \n" .
    "\n".
    "\$alpha\n" .
    "[1] 0.05";

$array_res=explode("\n",$res); 

//print_r($array_res);
$tab=array(); 

for($i=0;$i<count($array_res);$i++) { 
    if (strncmp($array_res[$i],"$",1)==0 ){
        $nomVar = substr( $array_res[$i] , 1 , strlen($array_res[$i])); 
        $tab[$nomVar]=array(); 
    }elseif (strncmp($array_res[$i],"[",1)==0) { 
        $val = substr( $array_res[$i] , 3 , strlen($array_res[$i])); 
        //Attention aux chaines de car. "ma chaine" il peuvent contenir des espaces
        $tab[$nomVar]=explode(" ",trim($val));         
    } 
} 

echo '<pre>';
print_r($tab);
echo '</pre>';
?>
Répondre à MedELID

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le jeudi 26 avril 2007 à 15:17:49
Je te remercie, ça marche bien mais comme tu l'avais prévu, la fonction 'trim' prend aussi en compte les espaces de ma chaîne de caractère alors qu'elle se présente comme une seule réponse à la variable correspondante !
Tu crois qu'il y a un moyen d'y remédier ?
Encore merci
Répondre à Xandler

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le jeudi 26 avril 2007 à 15:50:55
Pour info trim supprime juste les espaces qui se trouvent au début et à la fin d'une chaîne.

Voici une autre solution qui prend en compte les chaîines :

<?php

//Un exemple
$res=	"\$statistiqueShapiro\n" .
		"[1] 0.571231 0.6485 \n" .
		"\n".
		"\$alpha\n" .
		"[1] 0.05\n" .
		"\$conclusion\n" .
		"[1] \"Le graphique représente donc le nuage de points correspondant aux valeurs observées associé à la droite caractéristique de la loi normale. On pourra conclure que si le nuage semble suivre la droite, alors l'échantillon suivra une loi normale ! Aussi, le test de Shapiro-Wilk permet de comparer les valeurs observées à la loi normale. Cette valeur indique que plus celle-ci est proche de 1 alors plus la distribution sera normale. Ainsi, si cette valeur de test est supérieure au seuil alpha, on suivra alors une loi normale !\"\n" .
		"\n" .
		"\$verdict \n" .
		"[1] \"On en déduit que l'on suit donc bien une loi normale\"";

$array_res=explode("\n",$res); 

//print_r($array_res);
$tab=array(); 

for($i=0;$i<count($array_res);$i++) { 
	if (strncmp($array_res[$i],"$",1)==0 ){
		$nomVar = trim(substr( $array_res[$i] , 1 , strlen($array_res[$i]))); 
		$tab[$nomVar]=array(); 
	}elseif (strncmp($array_res[$i],"[",1)==0) { 
		$val = trim(substr( $array_res[$i] , 3 , strlen($array_res[$i]))); 
		//Attention aux chaines de car. "ma chaine" il peuvent contenir des espaces
		if(ereg('^".*"$',$val)) // c'est une chaine (attention une seule) ca ne prend pas en compte "Ma chaine1"  "Ma chaine2"
			$tab[$nomVar][]=trim($val);
		else
			$tab[$nomVar]=explode(" ",trim($val));
	} 
} 

echo '<pre>';
print_r($tab);
echo '</pre>';
?>
Répondre à MedELID

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le jeudi 26 avril 2007 à 16:06:00
C parfait je te remercie !
Par contre je n'ai pas compris à quoi servait le [] du $tab[$nomVar][] dans le if du ereg !!
Peux tu m'éclairer une dernière fois ?
Merci pour tout !
Répondre à Xandler

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le jeudi 26 avril 2007 à 16:18:47
Parceque dans le traitement, on a supposé que tous les éléments de $tab sont aussi des tableaux '$tab[$nomVar]=array(); ', ceci dit :
$tab[$nomVar][]=trim($val);
va inserer trim($val) dans le tableau (multidimensionnel) $tab[$nomVar] à la derniere positions +1.

Cela peut t'être très utilles après, dans ton traitement.
Répondre à MedELID

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le jeudi 26 avril 2007 à 16:21:34
Ok je vois !
En tout cas, merci beaucoup tu m'as été d'un grand secours !
Passe une bonne journée !
Répondre à Xandler

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le jeudi 26 avril 2007 à 16:37:50
Juste une dernière chose avant que tu me laisse tomber pour de bon ;)
(Je profite que tu sois là)
la sortie buffer de R avec plusieurs valeurs donne :
----------------------------------
$statistiqueShapiro
[1] 1.4834945 -0.2917662 -1.2723906 -0.3298322 -1.9793199 0.5722631
[7] 2.1656412 0.1625851 0.8576816 -0.3166099

$alpha
[1] 0.05

$conclusion
[1] "Le graphique représente donc le nuage de points correspondant aux valeurs observées associé à la droite caractéristique de la loi normale. On pourra conclure que si le nuage semble suivre la droite, alors l'échantillon suivra une loi normale ! Aussi, le test de Shapiro-Wilk permet de comparer les valeurs observées à la loi normale. Cette valeur indique que plus celle-ci est proche de 1 alors plus la distribution sera normale. Ainsi, si cette valeur de test est supérieure au seuil alpha, on suivra alors une loi normale !"

$verdict
[1] "On en déduit que l'on suit donc bien une loi normale"
---------------------------------------

Des crochets se mettent en début de chaque ligne concernant le statistiqueShapiro, et je ne pense pas que l'expression régulière utilisée règle le problème !
Vu que je ne suis pas franchement doué pour ces expressions, pense tu pouvoir m'aider ( the last one c juré ! )
A moins que j'essaie de travailler juste entre les $ ??
Re-Re-MERCI !
Répondre à Xandler

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le vendredi 27 avril 2007 à 01:49:56
Non l'expression régulière n'a rien à voir avec ce problème,

en fait le problème venait de la ligne $tab[$nomVar]=explode(" ",trim($val));

Quand cette ligne et appelé une deuxième fois avec la même valeur de $nomVar, dans ton cas statistiqueShapiro, les premières valeurs sont écrasées.

Bon voici une solution,

je reste à ta disposition si tu as d'autres remarques :

<?php

//Un exemple
$res= "\$statistiqueShapiro\n" .
  "[1] 0.571231 0.6485 \n" .
  "[7] 2.1656412 0.1625851 0.8576816 -0.3166099 \n" .
  "\n".
  "\$alpha\n" .
  "[1] 0.05\n" .
  "\$conclusion\n" .
  "[1] \"Le graphique représente donc le nuage de points correspondant aux valeurs observées associé à la droite caractéristique de la loi normale. On pourra conclure que si le nuage semble suivre la droite, alors l'échantillon suivra une loi normale ! Aussi, le test de Shapiro-Wilk permet de comparer les valeurs observées à la loi normale. Cette valeur indique que plus celle-ci est proche de 1 alors plus la distribution sera normale. Ainsi, si cette valeur de test est supérieure au seuil alpha, on suivra alors une loi normale !\"\n" .
  "\n" .
  "\$verdict \n" .
  "[1] \"On en déduit que l'on suit donc bien une loi normale\"";

$array_res=explode("\n",$res); 

//print_r($array_res);
$tab=array(); 

for($i=0;$i<count($array_res);$i++) { 
 if (strncmp($array_res[$i],"$",1)==0 ){
  $nomVar = trim(substr( $array_res[$i] , 1 , strlen($array_res[$i]))); 
  $tab[$nomVar]=array(); 
 }elseif (strncmp($array_res[$i],"[",1)==0) { 
  $val = trim(substr( $array_res[$i] , 3 , strlen($array_res[$i]))); 
  //Attention aux chaines de car. "ma chaine" il peuvent contenir des espaces
  if(ereg('^".*"$',$val)) // c'est une chaine (attention une seul) ca ne prend pas en compte "Ma chaine1"  "Ma chaine2"
   $tab[$nomVar][]=trim($val);
  else{
   $tabTemp=explode(" ",trim($val));
   foreach($tabTemp as $valT)
    $tab[$nomVar][]=$valT;
  }
 } 
} 

echo '<pre>';
print_r($tab);
echo '</pre>';
?>



Bonne nuit,

MedELID
Répondre à MedELID

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le vendredi 27 avril 2007 à 11:10:42
Re-Bonjour,
Un problème persiste toujours dans le résultat de la fonction !
Voici mon code :
----------------------------
try {
//$res=$connexion->read();
$retourR=$connexion->read();
$res=$retourR;
$array_res=explode("\n",$res);
$i = 0;
$tab=array();

while ($i<count($array_res))
{
if (strncmp($array_res[$i],"$",1)==0 || strncmp($array_res[$i],"[",1)==0)
{
if (strncmp($array_res[$i],"$",1)==0)
{
$var = trim(substr( $array_res[$i] , 1 , strlen($array_res[$i])));
$tab[$var]=array();
$i++;
}
if (strncmp($array_res[$i],"[",1)==0)
{
if (substr ( $array_res[$i], 3 , 1 ) == "]")
$val = trim(substr( $array_res[$i] , 4 , strlen($array_res[$i])));
else
$val = trim(substr( $array_res[$i] , 3 , strlen($array_res[$i])));
if (ereg ('^".*"$' , $val ))
{
$tab[$var][]=trim($val);
$i++;
}
else
{
$tabTemp=explode(" ",trim($val));
foreach ($tabTemp as $valT)
$tab[$var][]=$valT;
$i++;
}
}

echo '<pre>';
print_r($tab);
echo '</pre>';
}
else
$i++;
}
}
-------------------------------------------------
La sortie du buffer de R :
---------------------------------------
$statistiqueShapiro
[1] 0.01223099 0.43176282 0.46956899 -0.66109509 0.39779879 -0.55014000
[7] 0.31722540 -0.23021133 1.29095170 0.62460558 0.63600911 -0.47615614
[13] 2.16433739 -0.73519664 -0.31011329

$alpha
[1] 0.05

$conclusion
[1] "Le graphique représente donc le nuage de points correspondant aux valeurs observées associé à la droite caractéristique de la loi normale. On pourra conclure que si le nuage semble suivre la droite, alors l'échantillon suivra une loi normale ! Aussi, le test de Shapiro-Wilk permet de comparer les valeurs observées à la loi normale. Cette valeur indique que plus celle-ci est proche de 1 alors plus la distribution sera normale. Ainsi, si cette valeur de test est supérieure au seuil alpha, on suivra alors une loi normale !"

$verdict
[1] "On en déduit que l'on suit donc bien une loi normale"
-------------------------------------------------------
Et le résultat de la fonction PhP :
-------------------------------------------------
Array
(
[statistiqueShapiro] => Array
(
[0] => 2.16433739
[1] =>
[2] => -0.73519664
[3] =>
[4] => -0.31011329
)

[alpha] => Array
(
[0] => 0.05
)

[conclusion] => Array
(
[0] => "Le graphique (.......), on suivra alors une loi normale !"
)

[verdict] => Array
(
[0] => "On en déduit que l'on suit donc bien une loi normale"
)
)
----------------------------------------------------------------
En fait g bien l'impression que la fonction ne renvoie que la dernière ligne concernant la variable statistiqueShapiro !
Qu'en pensez-vous ?
Des solutions ?
Merci d'avance !
Répondre à Xandler

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le vendredi 27 avril 2007 à 12:19:51
Non, ce n’est pas le résultat que j'obtiens :
Array
(
    [statistiqueShapiro] => Array
        (
            [0] => 0.571231
            [1] => 0.6485
            [2] => 2.1656412
            [3] => 0.1625851
            [4] => 0.8576816
            [5] => -0.3166099
            [6] => ]
            [7] => 2.16433739
            [8] => -0.73519664
            [9] => -0.31011329
        )

    [alpha] => Array
        (
            [0] => 0.05
        )

    [conclusion] => Array
        (
            [0] => "Le graphique ...ale !"
        )

    [verdict] => Array
        (
            [0] => "On en déduit ..normale"
        )

)


Comme tu peux le remarquer, il y a juste une petite erreur dans [6] => ]

Bon voici une autre solution :
<?php
//Un exemple
$res=	"\$statistiqueShapiro\n" .
		"[1] 0.571231 0.6485 \n" .
		"[7] 2.1656412 0.1625851 0.8576816 -0.3166099 \n" .
		"[13] 2.16433739 -0.73519664 -0.31011329\n" .
		"\n".
		"\$alpha\n" .
		"[1] 0.05\n" .
		"\$conclusion\n" .
		"[1] \"Le graphique repré...u seuil alpha, on suivra alors une loi normale !\"\n" .
		"\n" .
		"\$verdict \n" .
		"[1] \"On en déduit que l... bien une loi normale\"";

$array_res=explode("\n",$res); 

//print_r($array_res);
$tab=array(); 

for($i=0;$i<count($array_res);$i++) { 
	if (strncmp($array_res[$i],"$",1)==0 ){
		$nomVar = trim(substr( $array_res[$i] , 1 , strlen($array_res[$i]))); 
		$tab[$nomVar]=array(); 
	}elseif (strncmp($array_res[$i],"[",1)==0) { 
		$val = trim(substr( $array_res[$i] , strpos($array_res[$i],']')+1 , strlen($array_res[$i]))); 
		//Attention aux chaines de car. "ma chaine" il peuvent contenir des espaces
		if(ereg('^".*"$',$val)) // c'est une chaine (attention une seul) ca ne prend pas en compte "Ma chaine1"  "Ma chaine2"
			$tab[$nomVar][]=trim($val);
		else{
			$tabTemp=explode(" ",trim($val));
			foreach($tabTemp as $valT)
				$tab[$nomVar][]=$valT;
		}
	} 
} 

echo '<pre>';
print_r($tab);
echo '</pre>';
?>


______________________________________________
Le résultat est :
Array
(
    [statistiqueShapiro] => Array
        (
            [0] => 0.571231
            [1] => 0.6485
            [2] => 2.1656412
            [3] => 0.1625851
            [4] => 0.8576816
            [5] => -0.3166099
            [6] => 2.16433739
            [7] => -0.73519664
            [8] => -0.31011329
        )

    [alpha] => Array
        (
            [0] => 0.05
        )

    [conclusion] => Array
        (
            [0] => "Le graphique repré...u seuil alpha, on suivra alors une loi normale !"
        )

    [verdict] => Array
        (
            [0] => "On en déduit que l... bien une loi normale"
        )

)
Répondre à MedELID

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le vendredi 27 avril 2007 à 12:51:13
Salut,
ça m'enerve je ne comprends pas : g le même code que toi et ça ne marche pas, il me renvoie seulement la dernière ligne !
Je pense que le problème est que, dans la véritable sortie de R, il n'y a pas de retour à la ligne après les deux premières lignes de résultats de statistiqueShapiro !
C'est possible ?
Y a t-il une solution ?
Je suis chiant, non ?
Répondre à Xandler

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
MedELID, le vendredi 27 avril 2007 à 15:27:57
Oui c'est possible, parce qu’un retour à la ligne est représenté par :
\n ou par \r\n (Forme générale sous Windows).

Donc je te conseille de lire ton fichier ligne par ligne (fget()) et de retourner directement un tableau.

Sinon il me faut ton fichier texte pour pouvoir te dire plus.

Dernière chose, est-ce que l'information entre [] n'est pas importante pour ton traitement par la suite ???.

MedELID
Répondre à MedELID

15


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le vendredi 27 avril 2007 à 15:57:57
Je vais me renseigner sur fget() !
Sinon, t'inquiète la valeur de [] n'est pas importante !
Je te remercie pour tout !
Bonne continuation @+
Répondre à Xandler

16


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Xandler, le vendredi 27 avril 2007 à 17:01:04
C résolu en fait c'était un soucis d'espaces juste avant les crochets !
Quand je comparais le premier caractère avec l'espace, il ignorait donc la ligne !!
Enfin, .............
Répondre à Xandler

17


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 MedELID, le vendredi 27 avril 2007 à 17:06:50
Youpiiiiii :D
Répondre à MedELID
Logiciels pertinents trouvés dans les téléchargements
Télécharger PHP Edit 0.6PHP Edit - PHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de...Catégorie: PHP
Licence: Freeware/gratuit
Télécharger PSPad 4.5.2PSPad - PSPad est un excellent éditeur de texte. Il est utile pour travailler sur du simple texte, mais aussi sur du HTML, CSS,...Catégorie: Développement
Licence: Freeware/gratuit
Télécharger Buddy Icon Constructor   1.0Buddy Icon Constructor - Les icônes disponibles sur le web ou sur votre base de donnée sont certes nombreuses, mais ce sont généralement des icônes...Catégorie: Personnalisation
Licence: Freeware/gratuit
Télécharger Tables multimédia  1,0Tables multimédia - En général les enfants ont tendance à ne pas vouloir étudier et les parents perdent parfois patience à leur apprendre. Peut...Catégorie: Bureautique
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [Php] Construction de tableaux »