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 :

Inverser colonne et ligne venant d'un champ textarea [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Inverser colonne et ligne venant d'un champ textarea
    Bonjour,

    Je m'arrache les cheveux depuis plusieurs jours sur cette fonction, à savoir inverser colonne et ligne venant d'un champ textarea de plusieurs lignes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $adresse = "Dr Machin Truc\n12 bd Truc Chouette\nBat 3\n06600 NICE CEDEX" ;
    Il faut que je puisse avoir au final :

    D1B0
    r2a6
    t6
    Mb0
    ad30
    c
    hT N
    ir I
    nu C
    c E
    T
    rC C
    uh E
    co D
    u E
    e X
    t
    t
    e
    Je ne sais pas pourquoi, ça ne fonctionne pas ! J'aimerais bien que ça fonctionne, hein, mais non.

    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
    $adresse = "Dr Machin Truc\n12 bd Truc Chouette\nBat 3\n06600 NICE CEDEX" ;
     
    echo $adresse . "<br><br>" ;
     
    $ligne = explode("\n" , $adresse) ;
    $nbligne = count($ligne) ;
     
    $carac = array() ;
    $table = array() ;
    $caracligne = array() ;
     
    for ($i = 0 ; $i < $nbligne ; $i++)
    {
    	$carac[$i] = str_split($ligne[$i]) ;
    	$caracligne[$i] = strlen($ligne[$i]) ;
     
    	for ($j = 0 ; $j < $caracligne[$i] ; $j++)
    	{
    		$table[$i][$j] = $carac[$i][$j] ;
    	}
    }
     
    // $table = array_reverse($table) ;
     
    for ($i = 0 ; $i < count($table) ; $i++)
    {
    	// $table[$i] = array_reverse($table[$i]) ;
    	for ($j = 0 ; $j < count($table[$i]) ; $j++)
    	{
    		echo $table[$i][$j] ;
    	}
    	echo "<br>" ;
    }
    Non seulement, le echo en milieu de route garde en mémoire un bout de la ligne précédente, mais sorti de la boucle, amnésie totale ! Quelle c****** ai-je pu faire, je n'en dors plus.
    Merci de m'aider.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour parcourir toutes les colonnes vous avez besoin de chercher la plus grande ligne dans la 1re boucle.
    et ensuite pour découper la chaine en caractères, vous avez peut être besoin d'une fonction qui gère les caractères multioctets.

    essayez cela :

    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
    $adresse = "Dr Machéin Trucœ\n12 bd Truc Chouette\nBat 3\n06600 NICE CEDEX" ;
     
    echo "<pre>";
    echo $adresse;
    echo "</pre>";
     
    $ligne = explode("\n" , $adresse) ;
    $nbligne = count($ligne) ;
     
    $maximumLigne = 0;
    $carac = array();
     
    for ($i = 0 ; $i < $nbligne ; $i++)
    {
    	$carac[$i] = preg_split("//u", $ligne[$i]);
    	$maximumLigne = max($maximumLigne, count($carac[$i]));
    }
     
     
    echo "<pre>";
     
    for ($i = 0 ; $i < $maximumLigne ; $i++)
    {
    	for ($j = 0 ; $j < count($carac) ; $j++)
    	{
    		if (!isset($carac[$j][$i])) {
    			echo " ";
    		} else {
    			echo $carac[$j][$i];
    		}
    	}
    	echo "\n" ;
    }
     
    echo "</pre>";

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

    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
    <?php
    function texte_en_colonne( $texte_en_ligne )
    {
    	$lignes = explode("\n", $texte_en_ligne);
    	$colonnes = array();
    	foreach($lignes as $ligne) // pour chaque ligne
    	{
    		$caracts = mb_strlen($ligne); // nombre de caractères de la ligne
    		for($i=0; $i<$caracts; $i++)
    		{
    			if(empty($colonnes[$i])){ $colonnes[$i]=''; } // si vide on crée
    			$colonnes[$i] .= mb_substr($ligne,$i,1); // on concatène le caractère
    		}
    	}
    //	echo '<pre>'; print_r($colonnes); echo '</pre>';
    	$texte_en_colonne = (!empty($colonnes))? implode("\n", $colonnes) :'';
    	return $texte_en_colonne;
    }
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $texte_en_ligne = "Dr Machin Truc\n12 bd Truc Chouette\nBat 3\n06600 NICE CEDEX" ;
    echo '<pre>'.$texte_en_ligne.'</pre>';
     
    $texte_en_colonne = texte_en_colonne( $texte_en_ligne );
    echo '<pre>'.$texte_en_colonne.'</pre>';
    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
    D1B0
    r2a6
      t6
    Mb 0
    ad30
    c  
    hTN
    irI
    nuC
     cE
    T  
    rCC
    uhE
    coD
    uE
    eX
    t
    t
    e
    N.B. Pour voir comment ça fonctionne, on peut afficher dans la fonction (avant la ligne $texte_en_colonne = .....) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo '<pre>'; print_r($colonnes); echo '</pre>';
    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
    Array
    (
        [0] => D1B0
        [1] => r2a6
        [2] =>   t6
        [3] => Mb 0
        [4] => ad30
        [5] => c  
        [6] => hTN
        [7] => irI
        [8] => nuC
        [9] =>  cE
        [10] => T  
        [11] => rCC
        [12] => uhE
        [13] => coD
        [14] => uE
        [15] => eX
        [16] => t
        [17] => t
        [18] => e
    )
    Dernière modification par Invité ; 12/04/2018 à 10h06.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Voici une variante, qui permet d'avoir les caractères d'une ligne alignés sur la même colonne :
    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
    <?php
    function texte_en_colonne( $texte_en_ligne )
    {
    	$lignes = explode("\n", $texte_en_ligne);
    	$max_caracts	= 0;
    	foreach($lignes as $ligne) // pour chaque ligne
    	{
    		$max_caracts	= max( $max_caracts, mb_strlen($ligne) );
    	}
    	$colonnes = array();
    	foreach($lignes as $ligne) // pour chaque ligne
    	{
    		for($i=0; $i<$max_caracts; $i++)
    		{
    			if(empty($colonnes[$i])){ $colonnes[$i] = ''; } // si vide on crée
    			$colonnes[$i] .= ( !empty(mb_substr($ligne,$i,1)) )? mb_substr($ligne,$i,1) : ' '; // on concatène le caractère, sinon on met un espace
    		}
    	}
    //	echo '<pre>'; print_r($colonnes); echo '</pre>';
    	$texte_en_colonne = (!empty($colonnes))? implode("\n", $colonnes) :'';
    	return $texte_en_colonne;
    }
    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
    D1B 
    r2a6
      t6
    Mb  
    ad3 
    c   
    hT N
    ir I
    nu C
     c E
    T   
    rC C
    uh E
    co D
     u E
     e X
     t  
     t  
     e
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo '<pre>'; print_r($colonnes); echo '</pre>';
    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
    Array
    (
        [0] => D1B 
        [1] => r2a6
        [2] =>   t6
        [3] => Mb  
        [4] => ad3 
        [5] => c   
        [6] => hT N
        [7] => ir I
        [8] => nu C
        [9] =>  c E
        [10] => T   
        [11] => rC C
        [12] => uh E
        [13] => co D
        [14] =>  u E
        [15] =>  e X
        [16] =>  t  
        [17] =>  t  
        [18] =>  e  
    )
    Une dernière variante ? :
    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
    <?php
    function texte_en_colonne2( $texte_en_ligne )
    {
    	$lignes = explode("\n", $texte_en_ligne);
    	$max_caracts	= 0;
    	foreach($lignes as $ligne) // pour chaque ligne
    	{
    		$max_caracts	= max( $max_caracts, mb_strlen($ligne) );
    	}
    	$colonnes = array();
    	foreach($lignes as $ligne) // pour chaque ligne
    	{
    		$ligne = str_pad($ligne, $max_caracts, ' '); // on complète la ligne avec des espaces, pour obtenir max_caracts caracteres
    		for($i=0; $i<$max_caracts; $i++)
    		{
    			if(empty($colonnes[$i])){ $colonnes[$i] = ''; } // si vide on crée
    			$colonnes[$i] .= mb_substr($ligne,$i,1); // on concatène le caractère
    		}
    	}
    echo '<pre>';print_r($colonnes);echo '</pre>';
    	$texte_en_colonne = (!empty($colonnes))? implode("\n", $colonnes) :'';
    	return $texte_en_colonne;
    }
    On obtient le même résultat... tout en apprenant une nouvelle fonction PHP !

    Dernière modification par Invité ; 12/04/2018 à 10h30.

  5. #5
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Avril 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Avril 2018
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, ça fonctionne du tonnerre !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/11/2014, 16h07
  2. Etat avec inversion des colonnes en lignes !
    Par el_aaroubi dans le forum WinDev
    Réponses: 8
    Dernier message: 11/04/2013, 23h16
  3. Inverser colonnes et lignes d'une table
    Par caramelle dans le forum Cognos
    Réponses: 1
    Dernier message: 23/08/2011, 11h09
  4. Inverser colonnes-lignes dans un datagridview
    Par gazier20 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 13/11/2007, 22h53
  5. inverser les colonnes et lignes dans un etat
    Par laurence1002 dans le forum IHM
    Réponses: 7
    Dernier message: 27/11/2006, 20h52

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