Probleme boucle dans une boucle

Résolu
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. Si tu pouvais nous donner ta source de données ça serait plus utile que ton code.
    0
    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
      1. 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
        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
          1. 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
            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