IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

déplacement dans un tableau


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 20
    Points
    20
    Par défaut déplacement dans un tableau
    bonjour à tous,

    j'ai un tableau initial de 12 valeurs :

    0 1 2 3 4 5 6 7 8 9 10 11

    j'ai transformé ce tableau en un tableau multi dimension : x lignes / 3 colonnes - array_chunck($montableau, 3);

    col0 col1 col2
    ligne0 0 1 2
    ligne1 3 4 5
    ligne2 6 7 8
    ligne3 9 10 11

    voici mon problème :
    je dois comparer sur chaque ligne la colonne $i avec la colonne $i-1
    si la valeur est différente (la variable étant un objet, il s'agit en fait d'un test sur une des clés, mais je ne pense pas que ca change la logique), je déplace tout à la ligne suivante

    donc dans mon exemple, mettons que ligne 1/col0 soit différent de ligne 1/col1 ca donne ca :
    col0 col1 col2
    ligne0 0 1 2
    ligne1 3
    ligne2 4 5 6
    ligne3 7 8 9
    ligne4 10 11

    je me noie dans les boucles et rien ne marche.
    pouvez vous m'indiquer la voie ?
    merci
    E.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Par exemple si j'ai au départ

    A A B
    C C C

    je fais un premier déplacement

    A A _
    B C C
    C

    Est-ce que du coup je dois aussi décaler comme ça ?
    A A _
    B _ _
    C C C
    C
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    oui, c'est exactement ca.
    plus de précisions :

    mon tableau contient des objets : des produits à afficher pour un site e-commerce
    ces produits ont plusieurs attributs :
    - catégorie
    - image
    - prix
    - stock

    je dois découper le tableau de résultat de la requete en base pour affichage correct dans mon template :
    des lignes de 3 colonnes max
    autant de lignes que de besoin (donc le nombre de lignes est variable et dépend du nombre de produits retournés)

    je veux afficher ces produits par catégorie
    j'ai donc fait un tri au préalable dans ma requete

    on arrive à mon problème :
    je veux passer a la ligne suivante si la catégorie change :
    NON :
    cat1 cat2 cat2

    OUI :
    cat1
    cat2 cat2

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    et voici le code qui permet l'affichage de ces produits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    $mainareahtml = '<div class="showcase'.$jxtc.'">';
     
    $index = 1;
    $itemPages = array_chunk(array_slice($items,0,($columns*$rows*$pages)),($rows * $columns));
    $itemPagesCount = count($itemPages);
    $p=1;
    foreach ($itemPages as $page) {
    	$mainareahtml .= '<div class="sframe'.$jxtc.'"';
    	if ($transmode == 'wind' || $transmode == 'winz' || $p > 1) {
    		$mainareahtml .= ' style="display:none"';
    	}
    	if ($itemPagesCount == 1) { $pageclass = 'singlepage'; }	// Page class
    	elseif ($p == 1) { $pageclass = 'firstpage'; }
    	elseif ($p == $itemPagesCount) { $pageclass = 'lastpage'; }
    	else { $pageclass = 'centerpage'; }
    	$pageclass = ($p%2) ? 'oddpage '.$pageclass : 'evenpage '.$pageclass;
     
    	$mainareahtml .= '><table class="table'.$jxtc.' '.$pageclass.' page-'.$p.'" width="100%" cellpadding="0" cellspacing="0">';
     
    	$itemRows = array_chunk($page,$columns); 
    	var_dump($itemRows);
    	$itemRowsCount = count($itemRows);
    	$r=1;
    	foreach ($itemRows as $row) {
    		if ($itemRowsCount == 1) { $rowclass = 'singlerow'; }	// Row class
    		elseif ($r == 1) { $rowclass = 'firstrow'; }
    		elseif ($r == $itemRowsCount) { $rowclass = 'lastrow'; }
    		else { $rowclass = 'centerrow'; }
    		$rowclass .= ($r%2) ? ' oddrow' : ' evenrow';
     
    		$mainareahtml .= '<tr class="'.$rowclass.' row-'.$r.'">';
    		$itemColumnCount = count($row);
    		$c=1;
     
    		// ici pour test de la catégorie
    		//		$test = array();
    		foreach ($row as $item) {
    			$itemhtml = $itemtemplate;
    			require JModuleHelper::getLayoutPath($module->module, 'default_parse');
    			if ($itemColumnCount == 1) { $colclass = 'singlecol'; } 	// Col class
    			elseif ($c == 1) { $colclass = 'firstcol'; }
    			elseif ($c == $itemColumnCount) { $colclass = 'lastcol'; }
    			else { $colclass = 'centercol'; }
    			$colclass .= ($c%2) ? ' oddcol' : ' evencol';
     
    			// EG : ajout de la catégorie du tour en cours pour comparaison avec la précédente et tentative infructueuse :
    			/*$test[$c] = $item->category_name;
    			if ($c>1) {
    			echo $c." : "; 
    			echo "c = ".$test[$c]." et c-1 = ".$test[$c-1];
    				if ($test[$c] != $test[$c-1]) {
    				echo " -> c'est différent <br/>";
    				// c'est bon, ca sort bien de la boucle, mais ca n'affiche pas les catégories différentes
    				break 1;
    				}
    				else {
    				echo " -> c'est tout pareil <br/>";
    				}
    			}
    			*/
     
    			// c'est à ce niveau qu'on insere les produits dans les cases.......
    			$mainareahtml .= '<td class="'.$colclass.' col-'.$c.'" style="width:'.$cell_width.'%" >'.$itemhtml.'</td>';
    			$c++;
    			$index++;
    		}
    		$mainareahtml .='</tr>';
    		$r++;
    	}
    	$mainareahtml .= '</table></div>';
    	$p++;
    }
    $mainareahtml .= '</div>';

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je te propose un découpeur comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    $array = array(0, 0, 0, 0, 3, 4, 4, 5, 5, 5, 5 ,5, 5, 6); 
    $col = 1;
    $previous_value = '';
    $ncol = 3;
    echo '<table border="1"><tr>';
    foreach ($array as $value) {
    	echo 'col' . $col;
    	echo 'cur' . $previous_value;
    	echo 'value' . $value;
    	echo '<br/>';
    	if ($previous_value !== '' && $previous_value != $value) {
    		for ($i = 0; $i <= ($ncol - $col); $i++) {
    			echo '<td>&nbsp;</td>';
    		}
    		$col = 1;
    		echo '</tr>';
    	}
    	echo '<td>' . $value . '</td>';
     
    	if ($col == $ncol) {
    		$previous_value='';
    		$col = 1;
    		echo '</tr><tr>';
    	}
    	else {
    		$col++;
    		$previous_value = $value;
    	}
    }
    // finalisation du tableau
    if ($col != $ncol + 1) {
    	for ($i = 0; $i <= ($ncol - $col); $i++) {
    				echo '<td>&nbsp;</td>';
    	}
    	echo '</tr>';
    }
    echo '</table>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    l'utilisation d'une <table> est-elle obligatoire ?
    de même que la découpe de l'array initial ?

    Je pense qu'on peut s'en sortir plus simplement, avec une structure basée sur les <div> :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <div class="Box-table">
    	<div class="Box-3row">
    		<div class="Box-1cell row0">A0</div>
    		<div class="Box-1cell row1">A1</div>
    		<div class="Box-1cell row2">A2</div>
    		<div class="Box-1cell row3">A3</div>
    		<div class="Box-1cell row4">A4</div>
    	</div>
    	<div class="Box-3row">
    		<div class="Box-1cell row0">B0</div>
    		<div class="Box-1cell row1">B1</div>
    	</div>
    	<div class="Box-3row">
    		<div class="Box-1cell row0">C0</div>
    		<div class="Box-1cell row1">C1</div>
    		<div class="Box-1cell row2">C2</div>
    	</div>
    </div>
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    .Box-table, .Box-3row, .Box-3row {
    	margin:0; padding:0;
    }
    .Box-table {
       display:table;
       clear:both;
    }
    .Box-3row {
       display:table-row;
       clear:both;
    }
    .Box-1cell {
       display:table-cell;
       width:33.3%; /* 3 colonnes égales */
       float:left;
    }
    .row0 { ... } /* 1ère colonne */
    .row1 { ... } /* colonne centrale */
    .row2 { ... } /* dernière colonne */

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    $prod_cat_prev = '';
    $compteur = 0;
    $mainareahtml .= '
    <div class="Box-table">
    	<div class="Box-3row">
    ';
    foreach($produits as $produit)
    {
    	if($produit->cat != $prod_cat_prev)
    	{
    		$prod_cat_prev = $produit->cat; // on change la catégorie
    		$compteur = 0; // on remet le compteur à 0
    		// on change de boite "Box-3row"
    $mainareahtml .= '
    		</div>
    	<div class="Box-3row">
    ';
    	}
    $mainareahtml .= '
    		<div class="Box-1cell row' . $compteur%3 . '">' . $produit->description . '</div>
    ';
    	$compteur++;
    }
    $mainareahtml .= '
    	</div>
    </div>
    ';
    ?>

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 36
    Points : 20
    Points
    20
    Par défaut RESOLU
    merci Sabotage, merci à tous, ca marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    $col = 1;
    $previous_value = '';
    $ncol = 3;
    $mainareahtml .= '><table class="table'.$jxtc.' '.$pageclass.' page-'.$p.'" width="100%" cellpadding="0" cellspacing="0"><tr>';
    foreach ($page as $item) {
    $itemhtml = $itemtemplate;
    require JModuleHelper::getLayoutPath($module->module, 'default_parse');
    //	echo 'col' . $col;
    //  echo 'cur' . $previous_value;
    //  echo 'value' . $item->category_name;
    //	echo '<br/>';
    	if ($previous_value !== '' && $previous_value != $item->category_name) {
    		for ($i = 0; $i <= ($ncol - $col); $i++) {
    			$mainareahtml .=  '<td>&nbsp;</td>';
    		}
    		$col = 1;
    		$mainareahtml .=  '</tr>';
    	}
    	$mainareahtml .= '<td style="width:'.$cell_width.'%" >'.$itemhtml.'</td>';
     
    	if ($col == $ncol) {
    		$previous_value='';
    		$col = 1;
    		$mainareahtml .=  '</tr><tr>';
    	}
    	else {
    		$col++;
    		$previous_value = $item->category_name;
    	}
    }
    // finalisation du tableau
    if ($col != $ncol + 1) {
    	for ($i = 0; $i <= ($ncol - $col); $i++) {
    				$mainareahtml .=  '<td>&nbsp;</td>';
    	}
    	$mainareahtml .=  '</tr>';
    }
    $mainareahtml .=  '</table>';

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2003] Problème de déplacement dans un tableau word
    Par fb62840 dans le forum VBA Word
    Réponses: 10
    Dernier message: 26/09/2012, 09h37
  2. déplacement d'un caractère dans un tableau
    Par romain_t dans le forum Fortran
    Réponses: 5
    Dernier message: 30/03/2010, 15h44
  3. [WD12E] Boutons déplacements dans un tableau
    Par Hell dans le forum WinDev
    Réponses: 5
    Dernier message: 20/12/2008, 23h18
  4. Déplacement de lignes dans un tableau HMTL
    Par Maxime_ dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/01/2006, 09h43
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo