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. 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. 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. 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