Tableau multi-dimmension: recupérer clé

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 12:17

Alors
J'ai déclaré dans
   

       public function __construct() {

		$this->tab = array();
		$this->i=0;

Que j'ai appelé dans la fonction subsequence

                       $this->tab[$this->i]=array ($msf,$profil,$pr);
			print_r ($this->tab);
			$this->i++;

Il n'y a pas de message d'erreur mais l'incrémentation reste toujour de 0 pour $tab, j'avais le même problème précédament en mettant $tab[$a], au lieu de me mettre les valeurs de $a en clé de $tab, il n'y avait que des 0.
Je ne voie pas d'ou peut venir le problème.

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 13:35

ton $i ca sert a rien
$this->tab[]=array  ($msf,$profil,$pr);

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 13:48

En le mettant ou pas, le resultat est le même : toujours Array ( [0] => Array ( [0] =>....
J'avais mis le this->i pour voir si cela fonctionnerai, pourtatn le $i lui marche parfaitement est me renvoie avec echo des valeur croissante toujours différentes, je ne voie donc pas pourquois lorsque je met
$this->tab[$this->i]=array ($msf,$profil,$pr);   

ou
 $this->tab[]=array ($msf,$profil,$pr);
Se qui devrait revenir au même je n'ai toujours pas d'incrémentation je commence à me demmander si cela est possible dans un tableau à plusieur dimmension??

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 13:50

comment se fait ton apelle de la class, montre plus de code

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 14:03


class selection {
public function __construct($way="/home/guillaume/Desktop/Seq-matrice/sequences.fasta") {

		$this->way=$way;

		$this->b=10;
		$this->tab = array();
		//$this->i=0;
}
public function execute() {
				

		if(file_exists($this->way)) {                              

			$lignes= file ($this->way); 
			                         

			//print_r($lignes);

			$cpt=0;                                                

			foreach($lignes as $ligne) {                           

				if(strpos($ligne,'>')!== false){
										

					if($cpt>0) {
					

						echo "$sequence<br \>";
						$sequence=trim($sequence," "); 

						$this->subsequence($sequence);   // L'appel se fait à ce niveau
						$sequence="";
						
               

					}
					$this->id=$ligne;

					$sequence="";

					$cpt++;

				}
				else{
				
					$sequence.=$ligne;  

					$sequence=trim($sequence);
				}

				

			}

			if($sequence!="") {     
				echo "$sequence<br \>"; 
				echo "$this->id<br \>";	
				#echo "$sequence<br \>";	
				$this->subsequence($sequence);
   //Ou bien à ce niveau
			}

		}
		else {   
			die("impossible d'ouvrir le fichier FASTA");

			

		}

	}

	public function subsequence($sequence) {

		$arr=array();
		$jen="/home/guillaume/Desktop/Seq-matrice/data.fasta";
		$pro=fopen($jen,"w+");
		fwrite($pro,$this->id);
		fwrite($pro,$sequence."\n");
		fclose($pro);
		chmod($jen,0777);

		for($a=0;$a<=strlen($sequence)-$this->b;$a++){                       

			$this->files=substr($sequence,$a,$this->b);

           		$align=array(0=>$this->files);	

		
			//print_r($align);  

	
			#msf

			$msa=new Msa($align);
			$msa->toMSF("/opt/lampp/htdocs/profils/test.msa");
		

			$file="/opt/lampp/htdocs/profils/test.msa";
			
			$msf=file_get_contents("$file");
				
		
			#pfmake

			$pfmake=new pfMake($file);			

			$pfmake->setAlignmentMode(-1);

			$pfmake->setLinearMode();

			$pfmake->execute();

			

					

			$pfmake->autoscale($db=0);

			$prf=$pfmake->getProfile();
			//echo $prf;
			$profil=file_get_contents("$prf");			
			#echo $profil;
		

			

			#  pfsearch
			$pfsearch=new pfSearch($prf,$jen);

			$pfsearch->execute();
			$pr=$pfsearch->getResult();

			#$prr=$pfsearch=file_get_contents($pr);
			#echo $pr;
				
			$this->tab[$this->i]=array ($msf,$profil,$pr);     // Voilà donc le tableau récapitulatif avec ou sans $this->i c'est la même
			print_r ($this->tab);
			//$this->i++;                                

		}
		
		#Recherche séquence significative
		$score=new score();
		$score->execute();
		$mx=$score->getResult();
				
		#Renvoie clé de $mx (valeur maximale)
		function recursive_array_search($needle,$haystack) {
    			foreach($haystack as $key=>$value) {
       			 $current_key=$key;
        			if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value))) {
			  	  return $current_key;
				}
		    	}
		return false ;  // A ce niveau le script me retoune "false"
		}
		$found = recursive_array_search($mx,$tab);
		var_dump($found);
 
	

		
	}
}


ViPHP
ViPHP | 5462 Messages

29 mars 2010, 14:06

et ton apelle tu le fait ou y'a que la class la

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 14:15

L'appel des fonctions se fait au sein de la classe

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 14:17

mais non, a un moment dans ton code PHP tu fais bien
$selection = new Selection();
$selection->execute();

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 14:20

en plus tu fais
$this->subsequence($sequence)
a chaque apelle ca va écraser ta valeur

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 14:41

Oui comme tu dis l'appel de la premiere fonction execute se fait dans un index

<?php

ini_set ('max_execution_time', 0); // Aucune limite d'execution
require_once("./selection.php");  

 $test=new selection();

 $test->execute();

 


?>		




Mais normalement ca ne devrai pas ecraser mes valeur présedente, c'est pourquois je veux utiliser un tableau, j'ai deja fait ce genre de chose avec un tableau classique et ca n'enregistre pas par-dessus mais au se rajoute au fur et à mesure dans le tableau.

ViPHP
ViPHP | 5462 Messages

29 mars 2010, 14:42

donc apres
$test->execute();
//fais
print_r($test->tab);

gui
Eléphant du PHP | 100 Messages

29 mars 2010, 14:53

C'est bon ca marche merci beaucoup pour la grande patience dont tu as fait preuve pour la suite je vais me débrouiller.
Encore merci pour tout.