Probleme avec un script php

Olivier13
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:05

Bonjour, j'ai un projet à réaliser ou le but est d'écrire un programme qui recense dans une séquence d'ADN tous les codons présents, regroupe ensemble les codons synonymes, et, pour un groupe de codons synonymes, recense les codons les plus fréquents. j'ai donc fais un script php mais je n'arrive pas a ce que je veux, lorsque j'entre ma séquence dans mon formulaire get, ca ne me met comme résultat uniquement le dernièr codon.

Par exemple si ma sequence entrée dans le formulaire est ATGATGATT,lorsque je lance l'analyse j'obtien:

Le codon 'Isoleucine' apparaît 1 fois

et non pas

Le codon 'Isoleucine' apparaît 1 fois
Le codon 'Méthionine' apparaît 2 fois

Voici mon script php...

<?php

$adn=$_GET['adn'];
$len=strlen($adn);
$codons=array('GCA' => 'Alanine',
'GCC' => 'Alanine',
'GCG' => 'Alanine',
'GCT' => 'Alanine',
'CGA' => 'Arginine',
'CGC' => 'Arginine',
'CGG' => 'Arginine',
'CGT' => 'Arginine',
'AGA' => 'Arginine',
'AGG' => 'Arginine',
'GAC' => 'Acide aspartique',
'GAT' => 'Acide aspartique',
'AAC' => 'Asparagine',
'AAT' => 'Asparagine',
'TGC' => 'Cysteine',
'TGT' => 'Cysteine',
'GAA' => 'Acide glutamique',
'GAG' => 'Acide glutamique',
'CAA' => 'Glutamine',
'CAG' => 'Glutamine',
'GGA' => 'Glycine',
'GGC' => 'Glycine',
'GGG' => 'Glycine',
'GGT' => 'Glycine',
'CAC' => 'Histidine',
'CAT' => 'Histidine',
'ATA' => 'Isoleucine',
'ATC' => 'Isoleucine',
'ATT' => 'Isoleucine',
'CTA' => 'Leucine',
'CTC' => 'Leucine',
'CTG' => 'Leucine',
'CTT' => 'Leucine',
'TTA' => 'Leucine',
'TTG' => 'Leucine',
'AAA' => 'Lysine',
'AAG' => 'Lysine',
'ATG' => 'Methionine',
'TTC' => 'Phenylalanine',
'TTT' => 'Phenylalanine',
'CCA' => 'Proline',
'CCC' => 'Proline',
'CCG' => 'Proline',
'CCT' => 'Proline',
'TCA' => 'Sérine',
'TCC' => 'Sérine',
'TCG' => 'Sérine',
'TCT' => 'Sérine',
'AGC' => 'Sérine',
'AGT' => 'Sérine',
'ACT' => 'Thréonine',
'ACC' => 'Thréonine',
'ACG' => 'Thréonine',
'ACT' => 'Thréonine',
'TGG' => 'Tryptophane',
'TAC' => 'Tyrosine',
'TAT' => 'Tyrosine',
'GTA' => 'Valine',
'GTC' => 'Valine',
'GTG' => 'Valine',
'GTT' => 'Valine',
'TAG' => 'STOP',
'TAA' => 'STOP',
'TGA' => 'STOP');
$freq=array();
for ($i=0;$i<$len;$i+=3)
$l=$codons{(substr($adn, $i, 3))};
if (isset($freq[$l])) {
$freq[$l]+=3;
} else {
$freq[$l]=1;
}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
<title>Biais</title>
</head>

<body>
<div>
<?php

foreach ($freq as $l => $nb)
{
echo "Le codon '".htmlentities($l)."' apparaît ".$nb." fois<br />\n";
}

?>
</div>
<a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">Retour</a>
</body>
</html>

Merci de m'aider je c pas quoi faire (pour info $codons et mon tableau indicé ou je stocke les codons,$freq est un tableau indicé ou je stocke les fréquences et je dois absolument utiliser une boucle for afin de faire le projet)

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 14:14


Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:16

Oui mais ca ne ma pas tellement aider dsl et je savais pas si je devais poster a la suite ou sur un autre post...

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 14:18

Oui mais ca ne ma pas tellement aider dsl et je savais pas si je devais poster a la suite ou sur un autre post...
pourtant je t'ai mis la solution...

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:19

Je dois utiliser la fonction for et non pas foreach c'est pour ca...

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 14:25

Je dois utiliser la fonction for et non pas foreach c'est pour ca...
ah oui c'est vrai les prof c'est des boulets, mais Patriboom t'avais aussi donner la solution avec for :wink:

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:26

Oui j'ai vu mais les prof sont encore plus que des boulet, ile veulent un if et un else dans la boucle for lol :p
Dsl mdr

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 14:31

Oui j'ai vu mais les prof sont encore plus que des boulet, ile veulent un if et un else dans la boucle for lol :p
Dsl mdr
c'est vraiment des glands :mrgreen:
ta le droit d'utiliser plusieurs fois "for" ?

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:35

Hum je sais pas lol mais je galere deja bien comme ca hihi

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 14:39

Le prof nous a dit qu'on pouvait le faire en utilisant 1 seule fois "for"...

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 14:48

Le prof nous a dit qu'on pouvait le faire en utilisant 1 seule fois "for"...
lol, c'est vraiement pour faire chié le coup du for, tu nous donneras la correction je suis sur que c'est drole :mrgreen:
$group 	= array_count_values($codons);
$key	= array_keys($group);
$val 	= array_values($group);

for($i = 0; $i < count($group); $i++)
{
	if($key[$i] !== 'STOP')
	{
		echo sprintf("Le codon %s apparaît %d fois\n", $key[$i], $val[$i]);  <br />\n", $val[$i], $key[$i]);
	}
}
EDIT: le STOP faut le garder non ?

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 15:54

ben en fait la sequence se fini toujours par un stop.
Au final il faut que j'ai comme resultat:

Le codonc CGA aparait 8 fois
Le codonc TGG aparait 5 fois
Le codonc ATT aparait 9 fois

cela doit etre stoké dans un tableau $freq pour pouvoir faire un histogramme de la frequence de chaque codon ensuitre.
Donc ta methode marche pas la,il faut proceder comme j'ai fait sof qu'il y a des erreur dan le mien et que sa ne marche pas :s

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 16:01

ta un exemple de séquence d'ADN

ViPHP
ViPHP | 5462 Messages

23 mars 2010, 16:14

ca donnerais plus un truc du genre
$adn 	= str_split($_GET['adn'], 3);
$freq 	= array_count_values($adn);
		
foreach($freq as $val => $num)
{
    echo sprintf("J'ai %d codons %s codant pour la %s<br />", $num, $val, $codons[$val]);
}

Invité
Invité n'ayant pas de compte PHPfrance

23 mars 2010, 16:45

Par exemple si la sequence ADN est : ATGATTATTTCCGCAGGGGGGTGA.

Ca donnerai:

Le codon 'ATG' apparaît 1 fois
Le codon 'ATT' apparaît 2 fois
Le codon 'TCC' apparaît 1 fois
Le codon 'GCA' apparaît 1 fois
Le codon 'GGG' apparaît 1 fois
Le codon 'TGA' apparaît 1 fois

tout sa stoqué dans un tableau $freq=array() pour pouvoir faire un histogramme en utilisant une boucle for, avec des else if comme j'ai fait...c mega chiant