Array. Ecart entre chaque valeur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Array. Ecart entre chaque valeur

par JOHAAANNS » 18 mars 2009, 12:12

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]

par Ryle » 17 mars 2009, 17:48

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 ;)

par JOHAAANNS » 17 mars 2009, 17:22

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.

par Ryle » 17 mars 2009, 16:59

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
:?:

Array. Ecart entre chaque valeur

par JOHAAANNS » 17 mars 2009, 16:34

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