Probleme boucle dans une boucle

Résolu
Fuji60 Messages postés 23 Statut Membre -  
Fuji60 Messages postés 23 Statut Membre -
Bonjour à tous,

voila, j'ai un gros problème avec mon code PHP. J'ai dans un fichier des valeurs que j'ai récupéré, et c'est l'amplitude de quelque chose en fonction du temps, donc elle varie. Si l'on avait une image, la courbe serait sinusoidale, donc il y a plusieurs pics d'amplitude. J'ai réussi à faire un code qui permet de trouver les intervalles ou il pourrait y avoir des pics d'amplitude, mais maintenant, je dois trouver ces pics d'amplitude en question mais je n'y parviens pas. Voici la partie de code la plus importante pour vous situer dans le contexte, c'est à partir du while que ca pose problème, car j'ai mis une boucle dans une boucle, mais je crois pas que ca soit la bonne solution, merci d'avance :

<?php
$temporaire = array (); 
$l = count($donnees); 

for($cle=0; $cle < $l ;$cle++) // On va extraire du tableau donnees toutes les valeurs surperieur a la borne inferieur 468 et on va le mettre dans le tableau temporaire. 
{ 
if($donnees[$cle]["amplitude"] > $borne_inf) 
{ 
$temporaire[]=array('temps'=> $donnees[$cle]['temps'],'amplitude'=> $donnees[$cle]["amplitude"] ) ; 
} 
} 


echo '<pre>'; 
print_r($temporaire); // On affiche les données contenu dans le tableau. 
echo '</pre>'; 



$l = count($temporaire); // Count va compter tous les elements du tableau temporaire, et on la met dans la variable $l. 
$debut_intervalle=0; // On définit la variable 
$fin_intervalle=0; // On définit la variable 
$i = 0; // On définit la variable 
$maxi = array(); // On créer le tableau maxi qui va contenir les maximum d'amplitude. 
$indice=0; // On definit les variables. 


while($i<$l-1) // Tant qu'on est pas passer par tous les elements du tableau temporaire... 
{ 
if(($temporaire[$i+1]['temps']-$temporaire[$i]['temps']>0.3) || $i==$l-2) // Si l'on change d'intervalle. 
{ 
$fin_intervalle=$i; 
echo "pic d'amplitude trouvé entre $debut_intervalle et $fin_intervalle <br>"; $debut_intervalle=$i+1; // On cherche les intervalles de clé. 
$maximum=$temporaire[$debut_intervalle]['amplitude']; // Début de la monté pour l'amplitude. 
echo "Au début de l'intervalle, le maximum vaut $maximum <br>" ; 
$temps_max=$temporaire[$debut_intervalle]['temps']; // Début de la monté pour le temps. 
echo "Au début de l'intervalle , le temps vaut $temps_max <br>" ; 
for($k=$debut_intervalle ;$k < $l-1; $k++) // Tant que l'on est pas passer par tous les elements du tableau 
{ 
if($temporaire[$k]['amplitude'] > $maximum AND $temporaire[$k]['temps'] > $temps_max) // Si l'amplitude est supérieur à la monté de l'amplitude. 
{ 
$maximum=$temporaire[$k]['amplitude']; // L'amplitude est égale au début de la monté. 
$temps_max=$temporaire[$k]['temps']; // Le temps est égale au temps du début de la monté. 
echo "$temps_max 
"; 
echo"$maximum 
"; 
} 
$maxi[$indice]['temps']=$temps_max; 
$maxi[$indice]['amplitude']=$maximum; 
} 
$indice++; 
} 

$i++; 
} 


?> 

6 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    pas forcement besoin des données, mais avec foreach c'est beaucoup plus simple, essayes comme ça:

    <?php
    $temporaire = array();
    
    foreach($donnees as $cle=>$value){
    	if($value["amplitude"] > $borne_inf)
    	{
    		$temporaire[]=array('temps'=> $value['temps'],'amplitude'=>$value["amplitude"] ) ;
    	}
    
    }
    echo 'Donnees supérieurs au mini:<br /><pre>';
    print_r($temporaire); // On affiche les données contenu dans le tableau.
    echo '</pre>';
    
    $memo_valeur=0;
    $array_pics=array();
    $c=0;
    foreach($temporaire as $cle=>$s_array){
    	
    	if($cle>0){
    		if($s_array['amplitude'] > $memo_valeur){
    			//on est dans une partie montante
    			//on memorise la valeur
    			$memo_valeur=$s_array['amplitude'];
    		}else{
    			//on est dans une partie descendante
    			//on memorise la valeur
    			$memo_valeur=$s_array['amplitude'];
    			//on memorise le pics  (clef précedente)
    			$array_pics[$c]['temps']=$temporaire[$clef-1]['temps'];
    			$array_pics[$c]['amplitude']=$temporaire[$clef-1]['amplitude'];
    		}
    	}
    	$c++;
    }
    
    echo 'Array des pics<br /><pre>';
    print_r($array_pics); // On affiche les données contenu dans le tableau.
    echo '</pre>';
    
    
    ?>
    1
  2. Fuji60 Messages postés 23 Statut Membre 1
     
    Merci de votre réponse Alain.

    En utilisant votre code, ca m'affiche 272 valeurs vides pour le tableau array_pics. Il devrait normalement y avoir 6 pics, comme il y a 6 intervalles. Ca me repete aussi Undefined variable: clef et Undefined variable: -1
    1
  3. seabust Messages postés 744 Date d'inscription   Statut Membre Dernière intervention   102
     
    Si tu pouvais nous donner ta source de données ça serait plus utile que ton code.
    0
  4. Fuji60 Messages postés 23 Statut Membre 1
     
    Oui biensur, je vous le met directement ici. Successivement, on a le temps, puis le tiret, et l'amplitude, et ainsi de suite.

    15.01-466
    15.02-474
    15.03-468
    15.04-478
    15.05-469
    15.06-480
    15.07-474
    15.08-485
    15.09-484
    15.1-493
    15.11-485
    15.12-497
    15.13-489
    15.14-496
    15.15-494
    15.16-497
    15.17-501
    15.18-503
    15.19-505
    15.2-507
    15.21-506
    15.22-500
    15.23-508
    15.24-500
    15.25-510
    15.26-502
    15.27-508
    15.28-503
    15.29-512
    15.3-501
    15.31-515
    15.32-509
    15.33-516
    15.34-510
    15.35-516
    15.36-508
    15.37-518
    15.38-516
    15.39-520
    15.4-510
    15.41-514
    15.42-507
    15.43-514
    15.44-505
    15.45-500
    15.46-491
    15.47-479
    15.48-463
    15.49-454
    15.5-437
    15.51-67.54
    15.52-431
    15.53-424
    15.54-413
    15.55-415
    15.56-408
    15.57-409
    15.58-401
    15.59-407
    15.6-404
    15.61-411
    15.62-402
    15.63-416
    15.64-408
    15.65-422
    15.66-419
    15.67-425
    15.68-431
    15.69-436
    15.7-438
    15.71-448
    15.72-443
    15.73-453
    15.74-447
    15.75-451
    15.76-446
    15.77-450
    15.78-451
    15.79-448
    15.8-455
    15.81-451
    15.82-456
    15.83-458
    15.84-463
    15.85-460
    15.86-471
    15.87-468
    15.88-476
    15.89-468
    15.9-483
    15.91-477
    15.92-489
    15.93-483
    15.94-488
    15.95-481
    15.96-488
    15.97-483
    15.98-495
    15.99-490
    16.0-491
    16.01-492
    16.02-489
    16.03-492
    16.04-493
    16.05-491
    16.06-497
    16.07-497
    16.08-495
    16.09-491
    16.1-495
    16.11-501
    16.12-495
    16.13-501
    16.14-498
    16.15-501
    16.16-497
    16.17-507
    16.18-503
    16.19-510
    16.2-501
    16.21-511
    16.22-501
    16.23-509
    16.24-500
    16.25-507
    16.26-500
    16.27-505
    16.28-491
    16.29-486
    16.3-467
    16.31-463
    16.32-446
    16.33-71.71
    16.34-434
    16.35-419
    16.36-411
    16.37-405
    16.38-395
    16.39-392
    16.4-393
    16.41-393
    16.42-387
    16.43-390
    16.44-389
    16.45-400
    16.46-397
    16.47-401
    16.48-400
    16.49-404
    16.5-408
    16.51-415
    16.52-421
    16.53-430
    16.54-431
    16.55-433
    16.56-433
    16.57-444
    16.58-436
    16.59-443
    16.6-442
    16.61-445
    16.62-441
    16.63-441
    16.64-439
    16.65-445
    16.66-451
    16.67-448
    16.68-454
    16.69-450
    16.7-453
    16.71-457
    16.72-467
    16.73-466
    16.74-474
    16.75-470
    16.76-478
    16.77-474
    16.78-477
    16.79-481
    16.8-489
    16.81-483
    16.82-489
    16.83-483
    16.84-494
    16.85-488
    16.86-495
    16.87-487
    16.88-492
    16.89-489
    16.9-500
    16.91-490
    16.92-499
    16.93-494
    16.94-496
    16.95-495
    16.96-499
    16.97-498
    16.98-500
    16.99-501
    17.0-501
    17.01-503
    17.02-500
    17.03-505
    17.04-497
    17.05-503
    17.06-502
    17.07-510
    17.08-503
    17.09-513
    17.1-499
    17.11-506
    17.12-504
    17.13-508
    17.14-501
    17.15-501
    17.16-485
    17.17-475
    17.18-459
    17.19-444
    17.2-67.54
    17.21-422
    17.22-418
    17.23-402
    17.24-398
    17.25-388
    17.26-381
    17.27-375
    17.28-371
    17.29-373
    17.3-369
    17.31-369
    17.32-370
    17.33-376
    17.34-373
    17.35-372
    17.36-373
    17.37-382
    17.38-383
    17.39-394
    17.4-396
    17.41-402
    17.42-407
    17.43-416
    17.44-416
    17.45-425
    17.46-421
    17.47-427
    17.48-419
    17.49-429
    17.5-429
    17.51-431
    17.52-428
    17.53-435
    17.54-434
    17.55-440
    17.56-445
    17.57-448
    17.58-450
    17.59-455
    17.6-458
    17.61-461
    17.62-464
    17.63-462
    17.64-474
    17.65-468
    17.66-479
    17.67-471
    17.68-483
    17.69-477
    17.7-482
    17.71-483
    17.72-489
    17.73-480
    17.74-493
    17.75-480
    17.76-492
    17.77-483
    17.78-491
    17.79-493
    17.8-495
    17.81-488
    17.82-495
    17.83-492
    17.84-495
    17.85-502
    17.86-499
    17.87-499
    17.88-502
    17.89-497
    17.9-498
    17.91-503
    17.92-503
    17.93-509
    17.94-506
    17.95-510
    17.96-501
    17.97-505
    17.98-498
    17.99-505
    18.0-500
    18.01-508
    18.02-505
    18.03-509
    18.04-499
    18.05-506
    18.06-502
    18.07-503
    18.08-495
    18.09-491
    18.1-472
    18.11-454
    18.12-443
    18.13-63.14
    18.14-423
    18.15-411
    18.16-407
    18.17-393
    18.18-389
    18.19-383
    18.2-373
    18.21-371
    18.22-372
    18.23-371
    18.24-367
    18.25-374
    18.26-370
    18.27-376
    18.28-366
    18.29-376
    18.3-371
    18.31-382
    18.32-382
    18.33-399
    18.34-401
    18.35-413
    18.36-413
    18.37-420
    18.38-412
    18.39-418
    18.4-417
    18.41-424
    18.42-426
    18.43-435
    18.44-431
    18.45-438
    18.46-439
    18.47-437
    18.48-445
    18.49-443
    18.5-452
    18.51-448
    18.52-460
    18.53-452
    18.54-460
    18.55-458
    18.56-467
    18.57-464
    18.58-472
    18.59-470
    18.6-481
    18.61-477
    18.62-484
    18.63-481
    18.64-491
    18.65-483
    18.66-494
    18.67-489
    18.68-495
    18.69-489
    18.7-494
    18.71-494
    18.72-492
    18.73-493
    18.74-499
    18.75-492
    18.76-500
    18.77-497
    18.78-495
    18.79-499
    18.8-502
    18.81-502
    18.82-496
    18.83-499
    18.84-502
    18.85-508
    18.86-504
    18.87-506
    18.88-500
    18.89-508
    18.9-502
    18.91-509
    18.92-511
    18.93-516
    18.94-509
    18.95-518
    18.96-512
    18.97-512
    18.98-515
    18.99-515
    19.0-513
    19.01-516
    19.02-504
    19.03-496
    19.04-490
    19.05-479
    19.06-464
    19.07-450
    19.08-436
    19.09-61.15
    19.1-423
    19.11-412
    19.12-407
    19.13-402
    19.14-396
    19.15-396
    19.16-396
    19.17-401
    19.18-390
    19.19-395
    19.2-389
    19.21-406
    19.22-399
    19.23-412
    19.24-413
    19.25-418
    19.26-414
    19.27-425
    19.28-421
    19.29-435
    19.3-436
    19.31-443
    19.32-443
    19.33-446
    19.34-444
    19.35-446
    19.36-446
    19.37-443
    19.38-444
    19.39-448
    19.4-446
    19.41-447
    19.42-448
    19.43-449
    19.44-461
    19.45-456
    19.46-464
    19.47-459
    19.48-465
    19.49-457
    19.5-471
    19.51-470
    19.52-478
    19.53-474
    19.54-480
    19.55-475
    19.56-475
    19.57-473
    19.58-483
    19.59-483
    19.6-482
    19.61-479
    19.62-484
    19.63-485
    19.64-489
    19.65-485
    19.66-486
    19.67-490
    19.68-486
    19.69-493
    19.7-489
    19.71-490
    19.72-492
    19.73-497
    19.74-491
    19.75-495
    19.76-495
    19.77-496
    19.78-490
    19.79-501
    19.8-496
    19.81-502
    19.82-493
    19.83-497
    19.84-493
    19.85-498
    19.86-495
    19.87-501
    19.88-494
    19.89-498
    19.9-495
    19.91-504
    19.92-496
    19.93-505
    19.94-499
    19.95-505
    19.96-497
    19.97-486
    19.98-473
    19.99-458
    20.0-450
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    suite a test en réel avec tes données, voici rectifs de mes erreurs:

    foreach($temporaire as $cle=>$s_array){
    	
    	if($cle>0){
    		if($s_array['amplitude'] > $memo_valeur){
    			//on est dans une partie montante
    			//on memorise la valeur
    			$memo_valeur=$s_array['amplitude'];
    		}else{
    			//on est dans une partie descendante
    			//on memorise la valeur
    			$memo_valeur=$s_array['amplitude'];
    			//on memorise le pics  (cle précedente)
    			$array_pics[$c]['temps']=$temporaire[$cle-1]['temps']; //erreur la clef au lieu de cle
    			$array_pics[$c]['amplitude']=$temporaire[$cle-1]['amplitude']; //erreur la clef au lieu de cle
    			$c++; //increment compteur ici
    		}
    	}
    	
    }
    0
  7. Fuji60 Messages postés 23 Statut Membre 1
     
    Ouaahou ! Merci Beaucoup Alain_42, ca fonctionne, merci encore pour le temps que vous m'avez accordé :D Je marque le sujet comme résolu !
    0