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 :

Diviser un array en 3 [PHP 5.4]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut Diviser un array en 3
    Bonjour à tous et merci d'avance pour votre aide.

    Je souhaiterais diviser un array en 3.
    Cela fonctionne partiellement, quand le array source compte un total impaire de valeurs, il manque toujours un enregistrement lors du traitement.

    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
     
    				$arrayCount = count($arraySource);
    				if (($arrayCount % 2) == 1) {$arrayCount++;}
     
    				$arraySlice[0] = array_slice($arraySource, 0, $arrayCount/3);
    				$arraySlice[1] = array_slice($arraySource, $arrayCount/3, $arrayCount/3);
    				$arraySlice[2] = array_slice($arraySource, ($arrayCount/3)*2);
     
    				$$id = "<h2>{$label}</h2>";
    				$$id .= "<hr />";
    				$$id .= '<table  width="100%" border="1" cellpadding="0" cellspacing="0">';
    				$$id .= '<tr><td valign="top" width="33%">';
    				$$id .= "<ul>".implode("\n", array_map(function($p) { return "<li>{$p}</li>"; }, $arraySlice[2]))."</ul>";
    				$$id .= '</td><td valign="top" width="33%">';
    				$$id .= "<ul>".implode("\n", array_map(function($p) { return "<li>{$p}</li>"; }, $arraySlice[1]))."</ul>";
    				$$id .= '</td><td valign="top" width="33%">';
    				$$id .= "<ul>".implode("\n", array_map(function($p) { return "<li>{$p}</li>"; }, $arraySlice[0]))."</ul>";
    				$$id .= "</td></tr></table>";
    				$$id .= "<br />";
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    				if (($arrayCount % 2) == 1) {$arrayCount++;}
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    				if($arrayCount % 3 != 0){ $arrayCount += 3 - ($arrayCount % 3); } // multiple de 3 directement supérieur
    Répartition verticale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    |  1  |  4  |  7  |
    |  2  |  5  | ... |
    |  3  |  6  | ... |
    Dernière modification par Invité ; 24/08/2013 à 13h36.

  3. #3
    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
    Par défaut
    Je ne reproduis pas ton problème.

    Quel est ton jeu de données en entrée ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci de l’intérêt que vous portez à mon problème.
    Les données sont simple, mais leurs nombre varie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array = array("Orange","Pomme","Poire");
    Je vais tenter la solution de jreaux62 et je reviens vers vous.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Cela semble mieux fonctionné.
    Mise à part que si mon array compte 4 valeurs, celle-ci sont reparti sur 2 colonnes et la troisième reste vide. Ce n'est qu'un détail, mais si il est possible de faire en sorte qu'elle repartisse toujours sur les trois colonnes cela me conviendrais mieux

  6. #6
    Invité
    Invité(e)
    Par défaut
    Remplacer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				$arraySlice[0] = array_slice($arraySource, 0, $arrayCount/3);
    				$arraySlice[1] = array_slice($arraySource, $arrayCount/3, $arrayCount/3);
    				$arraySlice[2] = array_slice($arraySource, ($arrayCount/3)*2);
    par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($arraySource as $j => $source){
    				$arraySlice[$j%3][] = $source;
    }
    N.B La répartition n'est plus verticale, mais horizontale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    |  1  |  2  |  3  |
    |  4  |  5  |  6  |
    |  7  | ... | ... |

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Voila, nous y sommes et encore une fois merci.

    J'ai du ajouter cela, car si mon tableau comptait moins de trois enregistrement cela générait une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		foreach($arraySource as $j => $source){
    			$arraySlice[$j%3][] = $source;
    		}
     
    		if (count($arraySlice) < 3) {
    			$arrayGhost = array();
    			$arraySlice = array_pad($arraySlice, 3, $arrayGhost);
    		}
    Aussi jreaux62 pourrait tu m'expliquer ton code, je ne parvient pas à le comprendre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $arraySlice[$j%3][] = $source;
    Merci,

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

Discussions similaires

  1. Diviser un array toutes les deux valeurs
    Par MrWazo dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2015, 14h40
  2. C-Array et division
    Par salma1990 dans le forum C++
    Réponses: 10
    Dernier message: 20/03/2013, 16h04
  3. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  4. Réponses: 2
    Dernier message: 23/02/2003, 00h49
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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