Page 1 sur 1

Array. Ecart entre chaque valeur

Posté : 17 mars 2009, 16:34
par JOHAAANNS
Bonjour,

Je ne pense pas que mon titre soit explicite, mais j'ai un petit soucis.

voici mon code :
foreach($GRP_img as $cle => $valeur) 
		{
			/*gc_elements*/
			mysql_select_db($database_galerie, $galerie);
			$sql_grpimg_element = "SELECT * FROM gc_elements WHERE element_id =".$valeur; 
			$grpimg_element = mysql_query($sql_grpimg_element, $galerie) or die(mysql_error());
			$row_grpimg_element = mysql_fetch_assoc($grpimg_element);
			
				echo $cle.' : '.$valeur.'. Pos : '.$row_grpimg_element['element_position'].'<br>';
				
				$img_position.= '|'.$row_grpimg_element['element_position'];
		}
		
		//$position_array = array($img_position);
		
		$tab = explode('|',$img_position);
		$compte =  count($tab)-1;
		//echo '<br>'.$compte.'<br>';
		print_r($tab);
Mon print_r($tab) affiche :

Array ( [0] => [1] => 10 [2] => 20 [3] => 40 [4] => 50 [5] => 60 )

Ce que j'aimerais avoir, c'est extraire un groupe de valeur ayant pour écart 10
exemple:
de 10,20 serait mon premier groupe

de 20 à 40 il n'y a pas 10 d'écart donc pas de groupe

de 40,50,60 serait mon 2eme groupe

Je ne sais pas si je suis bien clair....
Si vous comprenez pouvez vous m'eclairer..
Merci

Posté : 17 mars 2009, 16:59
par Ryle
En gros, ce que tu veux faire c'est :

Code : Tout sélectionner

TANT QUE tu as des éléments dans le tableau SI la valeur de l'élément courrant est différente de l'élément précédent + 10 tu créer un nouveau groupe FIN SI tu ajoutes ensuite l'élément courrant dans le groupe courrant FIN TANT QUE
:?:

Posté : 17 mars 2009, 17:22
par JOHAAANNS
Oui c'est exactement ca...

Mais je n'arrive pas a trouver 'l'algorithme" qui permet de le faire..j'avoue que je galère un peu..ca me semble pourtant pas sorcier !!!

Il n'existe pas une function (array) qui me permettrait de le faire directement ?

en tout cas merci de cette réponse rapide.

Posté : 17 mars 2009, 17:48
par Ryle
Et il te plait pas le mien d'algorythme ? :)

Suffit juste de remplacer mes mots par les structures/fonctions qui vont bien et le tour est joué :)

Bon.... je vais essayer de détailler un peu plus :

Code : Tout sélectionner

Déclare un tableau vide, qui va contenir les groupes (sous tableaux contenant les différents éléments) TANT QUE tu as des éléments dans le tableau $tab SI la valeur de l'élément courrant ($i) est différente de : l'élément précédent ($i-1) + 10 Déclare un tableau vide dans le tableau contenant les groupes FIN SI Dans le dernier élément du tableau des groupes (count()-1), ajoute l'élément courrant FIN TANT QUE Affiche le tableau des groupes et zooouuuuu* .... :)
* "Zooouuuuu" est un terme technique, il est important de le clamer bien haut une fois que ton code fonctionnera ;)

Posté : 18 mars 2009, 12:12
par JOHAAANNS
Merci de ton explication, je pense avoir reussi :
[Je donne la solution pour les autres, en esperant que tout est bon ;)]
if (isset($_POST['GROUPE_IMG']))
{
// vérifions que la variable a été transmise
$GRP_img = (isset($_POST['GRP_img']))?$_POST['GRP_img']:null;

$img_position ='No';

// bouclons sur le tableau qui a été transmis et affichons les valeurs sélectionnées
if (!empty($GRP_img))
 {
 
 $tab_groupe = array();
 $ecart = 10;
		foreach($GRP_img as $cle => $valeur) 
		{
			/*gc_elements*/
			mysql_select_db($database_galerie, $galerie);
			$sql_grpimg_element = "SELECT * FROM gc_elements WHERE element_id =".$valeur; 
			$grpimg_element = mysql_query($sql_grpimg_element, $galerie) or die(mysql_error());
			$row_grpimg_element = mysql_fetch_array($grpimg_element);
			
				echo $cle.' : '.$valeur.'. Pos : '.$row_grpimg_element['element_position'].'<br>';
				
				$img_position.= '|'.$row_grpimg_element['element_position'];
				
		}
		
		
		
		//$position_array = array($img_position);
		
		$tab = explode('|',$img_position);
		$compte =  count($tab);
		//echo '<br>'.$compte.'<br>';
		print_r($tab);
	$ecart = 10;			
	$tableau_groupe	='';
	
			for ($x =1; $x < $compte; $x++)
			{
			echo $val1 = $tab[$x];
			echo $val2 = $tab[$x-1];
			echo '<br>';
			$resultat = $val2-$val1 ;
			
				if ($val1  == ($val2)+10)
				{
					$tableau_groupe.= "|".$val1;
				}
				else
				{
					$tableau_groupe.= ",".$val1;
				}

			}
			echo '<br><br>';
			print_r( $tableau_groupe);
			
		//$count = count($paquet);
} 


}
Affiche :
|10|20,40|50|60,100|110|120|130

Chaque paquet est séparé par une ","
;)

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]