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 :

Classer un Tableau multi-dimensionnel


Sujet :

Langage PHP

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Classer un Tableau multi-dimensionnel
    Bonjour,

    J'ai un tableau comme celui ci-dessous, je veux le classer par nom (Surname) pour ensuite l'affichier. Comment faire?

    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
    Array
    (
        [count] => 3
        [0] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => toto
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => pedro
                    )
                [1] => Firstname
                [count] => 3
            )
        [1] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => titi
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => philipo
                    )
                [1] => Firstname
                [count] => 3
            )
        [2] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => pilou
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => patrick
                    )
                [1] => Firstname
                [count] => 3
            )
    )
    Je voudrai comme résultat:
    pilou
    titi
    toto

    PS: L'affichage du tableau est déjà réalisé. Je n'ai plus qu'a le mettre dans l'ordre souhaité. Comment faire?

    Cordialement,
    Vandman

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Bonjour,

    la fonction multisort ne correspond pas à vos besoins ?
    Christophe

    Pensez à mettre quand c'est le cas.

  3. #3
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    Peut être que multisort correspond à mon besoin, mais je n'ai rien compris à la doc et je ne suis pas sur que ca réponde à mon besoin.
    Pour rappel, je fais une recherche LDAP qui me retourne un tableau (tableau composé de tableaux):
    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
    Array
    (
        [count] => 3
        [0] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => toto
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => pedro
                    )
                [1] => Firstname
    			[CN] => Array
                    (
                        [count] => 1
                        [0] => pedro toto
                    )
                [2] => CN
                [count] => 3
            )
        [1] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => titi
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => philipo
                    )
                [1] => Firstname
    			[CN] => Array
                    (
                        [count] => 1
                        [0] => philipo titi
                    )
                [2] => CN
                [count] => 3
            )
        [2] => Array
            (
                [Surname] => Array
                    (
                        [count] => 1
                        [0] => pilou
                    )
                [0] => Surname
                [Firstname] => Array
                    (
                        [count] => 1
                        [0] => patrick
                    )
                [1] => Firstname
    			[CN] => Array
                    (
                        [count] => 1
                        [0] => patrick pilou
                    )
                [2] => CN
                [count] => 3
            )
    )
    Je veux le mettre en forme comme dans le fichier html en pièce jointe (test.html).
    J'ai compris comment afficher le CN à la place de l'index du tableau. Mais je n'arrive toujours pas à mettre le tableau dans l'ordre désiré.
    Un peu d'aide?
    Cordialement,
    vandman

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Avez-vous essayé multisort ?
    Christophe

    Pensez à mettre quand c'est le cas.

  5. #5
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,
    J'ai essayé (l'exemple 2), mais comme je n'ai pas trop compris le fonctionnement, ca n'a rien donné???
    Je ne sais pas comment faire?

    De plus, mon tableau est une imbrication de tableau.
    Chaque ligne est composé de tableau multidimensionnel et est identifié par un nombre (id de la ligne, ici m).
    Array [m] = Array (Array [nom] = Array [n], Array [prenom] = Array [o], Array [CN] = Array [p], ...)
    ou m, n, o, p sont des entiers.
    Je veux donc pouvoir trier mon tableau en fonction de : Array [m][CN][p] et non pas en fonction de Array [m].

    Faut-il que je reconstruise mon tableau pour pouvoir trier?

    Cordialement,
    Vandman

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Quel exemple 2 ? Je ne vois pas de fonction array_multisort.
    Pouvez-vous nous donner un peu plus de code ? Sur le vieux serveur (PHP 5.0.2) que j'ai à ma disposition, le code fournit ne fonctionne pas.
    Christophe

    Pensez à mettre quand c'est le cas.

  7. #7
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,
    Je parlais de l'exemple 2 de la doc PHP sur multisort.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $ar = array(
           array("10", 11, 100, 100, "a"),
           array(   1,  2, "2",   3,   1)
          );
    array_multisort($ar[0], SORT_ASC, SORT_STRING,
                    $ar[1], SORT_NUMERIC, SORT_DESC);
    var_dump($ar);
    ?>

    Pour information:
    Voici mon code pour faire ma requete LDAP
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    <html>
    	<head>
        	<meta http-equiv="refresh" content="url=index.php">
        	<meta charset="utf-8">
    	</head>
    	<body>
    	<form name="RecherchePersonne" method="post" onsubmit=addwildcard() action="index.php">
            <input type="text" name="givenName" placeholder="Prénom"/> <br/>
            <input type="text" name="SN" placeholder="Nom de Famille"/> <br/>
            <input type="text" name="mailbox" placeholder="E-mail"/> <br/>
            <div class="boutonform">
            <button type="submit" name="valider">OK</button>
            <!--<input type="submit" name="valider" value="OK"/>!-->
            </div>
        </form>
    	<?php
    	if(isset($_POST['valider']))
    	{
     
    		ini_set('display_errors', 'On');
    		error_reporting(E_ALL);
    	 	include 'functions.php';
    		// IDENTIFIANTS DE CONNEXION ANONYME AU LDAP
    		$baseDN = "c=fr";
    		//$baseDN = "";
    		//$baseDN = "";
    		$ldapServer = "ldap.fr"; 
    		$ldapServerPort = 389;
    		// Utilisation de ldap bind
    		$ldaprdn  = 'cn=ldapProxy,c=fr';     // ldap rdn or dn
    		$ldappass = 'toto';  // associated password
    		$justthese = array("pcmailtype", "cn", "sn", "givenname", "personaltitle", "delegationtarget", "preferredrfc822originator", "street", "postalcode", "l", "telephonenumber", "login", "direction");
     
     
    		echo "Connexion au serveur <br />\n";
    		$conn=ldap_connect($ldapServer);
     
    		// DISPOSE-T-ON D'UNE CONNEXION AU SERVEUR LDAP ?
    		if ($conn)
    			echo "Le résultat de connexion est ".$conn ."<br />\n";
    		else
    			die("connexion impossible au serveur LDAP <br />\n");
     
    		// VERIFICATION DE LA VERSION DU LDAP UTILISEE
    		if (ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3)) {
    		    echo "Utilisation de LDAPv3 <br />\n";
    		} else {
    		    echo "Impossible d'utiliser LDAP V3 <br />\n";
    		    exit;
    		}
     
    		// LE SERVEUR LDAP EST TROUVE, ON POURSUIT LA CONNEXION 
    		// AVEC LES INSTRUCTIONS DE LIAISON
    		print ("Connexion non anonyme...<br/>");
    		if ($conn)
    		{
    			$bindServerLDAP=ldap_bind($conn, $ldaprdn, $ldappass);
    			print ("Liaison au serveur : ". ldap_error($conn)."<br />\n");
    			// EN CAS DE SUCCES DE LA LIAISON, ON RECOIT VRAI
    			if ($bindServerLDAP)
    			  echo "Le résultat de connexion est $bindServerLDAP <br />\n";
    			else
    			  die("Liaison impossible au serveur ldap ... <br />\n");
    		}
     
    		// CONNEXION AVEC LES INFORMATIONS SUIVANTES
    		$gn=$_POST['givenName'];
    		$sn=$_POST['SN'];
    		$mailbox=$_POST['mailbox'];
    		// Construction
    		if (!empty($sn) && empty($gn) && empty($mailbox) )
    		{
    			$queryldap = "sn=" . "*" . $sn . "*";
    		}
    		elseif (!empty($gn) && empty($sn) && empty($mailbox))
    		{
    			$queryldap = "givenName=" . "*" . $gn . "*";
    		}
    		elseif (!empty($mailbox) && empty($sn) && empty($gn))
    		{
    			$queryldap = "preferredrfc822originator=" . "*" . $mailbox . "*";
    		}
    		elseif (!empty($sn) && !empty($gn) && empty($mailbox))
    		{
    			$queryldap = "(&(sn=" . "*" . $sn . "*)". "(givenName=" . "*" . $gn . "*))";
    		}
    		elseif (!empty($sn) && !empty($mailbox) && empty($gn))
    		{
    			$queryldap = "(&(sn=" . "*" . $sn . "*)". "(preferredrfc822originator=" . "*" . $mailbox . "*))";
    		}
    		elseif (!empty($gn) && !empty($mailbox) && empty($sn))
    		{
    			$queryldap = "(&(givenName=" . "*" . $gn . "*)". "(preferredrfc822originator=" . "*" . $mailbox . "*))";
    		}
    		elseif (!empty($sn) && !empty($gn) && !empty($mailbox))
    		{
    			$queryldap = "(&(sn=" . "*" . $sn . "*)" . "(givenName=" . "*" . $gn . "*)" . "(preferredrfc822originator=" . "*" . $mailbox . "*))" ;
    		}
    		else
    		{
    			$queryldap="";
    		}
    		$result=ldap_search($conn, $baseDN, $queryldap, $justthese);
     
    		$info = ldap_get_entries($conn, $result);
    		$countinfo = ldap_count_entries($conn,$result);
    		echo "Le nombre d'entrées retournées est " . $countinfo . "<br />\n";
     
    		echo "\n<h1>Dump all data</h1><br />\n";
    		if (isset($countinfo))
    		{
    			if ($countinfo == 0)
    			{
    				echo "<div class='menudroit'><div class='subtitle'>Aucune Personne Trouvée (" .  $countinfo . ")";
    			}
    			elseif ($countinfo == 1)
    			{
    				echo "<div class='menudroit'><div class='subtitle'>Personne Trouvée (" .  $countinfo . ")";
    			}
    			else
    			{
    				echo "<div class='menudroit'><div class='subtitle'>Personnes Trouvées (" .  $countinfo . ") / (Max = 500)";
    			}
    			AfficheTableau($info);
    			echo "</div><br>";
    		}
    		echo "<pre>";
    		print_r($info);
    		echo "</pre>";
    		/* CLOTURE DES CONNEXIONS DB & LDAP */
    		echo "Fermeture de la connexion";
    		ldap_close($conn);
    	}
    	?>
    	</body>
    </html>
    Voici le code pour afficher le résultat:
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    <?php
     
    function FunctRowspan2($ArrayPosition2){
    	$j=0;
    	if (is_array($ArrayPosition2) || is_object($ArrayPosition2))
    	{
    		foreach($ArrayPosition2 as $cle3 => $champ3)
    				{
    					if (is_int($cle3))
    	   				{
    	   					$j++;
    	   				}
    				}
    		return $j;
    	}
    }
    function FunctRowspan1($ArrayPosition){
    	$i=0;
    	if (is_array($ArrayPosition) || is_object($ArrayPosition))
    	{
    	   	foreach($ArrayPosition as $cle2 => $champ2)
    		{
    	   		if (is_string($cle2))
    	   		{
    	   			if (is_array($champ2) || is_object($champ2))
    	   			{
    		   			foreach($champ2 as $cle3 => $champ3)
    					{
    						if (is_int($cle3))
    		   				{
    		   					$i++;
    		   				}
    					}
    	   			}
    			}
    		}
    		return $i;
    	}
    }
     
    function AfficheTableau($info)
    {
    	echo "<link href=\"affichage.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\" />";
    	echo "<script type=\"text/javascript\" src=\"tablecloth.js\"></script>";
    	echo "<table cellspacing=\"0\" cellpadding=\"0\">\n";
    	echo "<thead> <!-- En-tête du tableau -->\n";
    	echo "   <tr>\n";
    	//echo "       <th>Ligne</th>\n";
    	echo "       <th>Utilisateur</th>\n";
    	echo "       <th>champ disponnible</th>\n";
    	echo "       <th>valeur champ</th>\n";
    	echo "   </tr>\n";
    	echo "</thead>\n";
    	echo "<tbody> <!-- Corps du tableau -->\n";
     
    	$z=0;
    	// test si $info est un objet ou un array
    	if (is_array($info) || is_object($info))
    	{
    		sort($info);
    		foreach($info as $cle1 => $champ1)
    		{
    			$c1=0;
    			// test si $champ1 est un objet ou un array
    			if (is_array($champ1) || is_object($champ1))
    			{
    				if (empty($info[$cle1]['cn']))
    				{
    					$rowspan1=FunctRowspan1($info[$cle1]);
    				}
    				else
    				{
    				$rowspan1=FunctRowspan1($info[$cle1]) - 1;
    				}
    				//sort($champ1);
    				foreach($champ1 as $cle2 => $champ2)
    				{
    					$c2=0;
    					if ((is_array($champ2) || is_object($champ2)) && ($cle2 != 'cn'))
    					{
    						if (empty($info[$cle1]['cn']))
    						{
    							$rowspan2=FunctRowspan2($info[$cle1][$cle2]);
    						}
    						else
    						{
    							$rowspan2=FunctRowspan2($info[$cle1][$cle2]) - 1;
    						}
    						foreach($champ2 as $cle3 => $champ3)
    						{
    							if (is_int($cle3))
    							{
    								$cle2 = cle2francais($cle2);
    		    					echo "	<tr>\n"; // début de la ligne
    		    					//echo "		<td>Ligne = " . $z . "</td>\n";
    		    					//$z++;
    		    					//1ère colonne
    		    					echo "		<td>" . $info[$cle1]['cn'][0] . "</td>\n";
    		    					if ($rowspan1 == 0) // une seul ligne
    						    	{
    						    		echo "		<td>" . $info[$cle1]['cn'][0] . "</td>\n";
    						    	}
    						    	else //plusieurs lignes
    						    	{
    						    		if ($c1 == 0) // Première ligne de la 1ère colonne
    						    		{
    						    			echo "		<td rowspan=\"" . $rowspan1 . "\">" . $info[$cle1]['cn'][0] . "</td>\n";
    						    			$c1=1;
    						    		}
    						    		// Else, ne fait rien pour la Nème ligne de la 1ère colonne
    						    	}
    						    	//2ème colonne
    						    	if ($rowspan2 < 0) // pas de ligne pour la colonne 2
    			    				{
    							    	echo "		<td></td>\n";
    							    }
    							    elseif ($rowspan2 >= 0) // 1 ligne pour la colonne 2
    			    				{
    							    	echo "		<td>" . $cle2 . "</td>\n";
    							    }
    							    else //plusieurs lignes
    							    {
    							    	if ($c2 = 0) // Première ligne de la 2ème colonne
    							    	{
    							    		echo "		<td rowspan=\"" . $rowspan2 . "\">" . $rowspan2 . $cle2 . "</td>\n";
    							    		$c2=1;
    							    	}
    							    }
    							    //3ème colonne
    								echo "		<td>" . $champ3 . "</td>\n";
    		    					echo "	</tr>\n";
    			    			}
    						}
    		    		}
    				}
    			}
    		}
        echo "</table>\n";
    	}
    }
     
    function cle2francais($cle2)
    {
    	if ($cle2 == "street")
    	{
    		$cle2 = "Rue";
    	}
    //	if ($cle2 == "cn")
    //	{
    //		$cle2 = "Nom Complet";
    //	}
    	if ($cle2 == "postalcode")
    	{
    		$cle2 = "Code Postal";
    	}
    	if ($cle2 == "givenname")
    	{
    		$cle2 = "Prénom";
    	}
    	if ($cle2 == "sn")
    	{
    		$cle2 = "Nom de Famille";
    	}
    	if ($cle2 == "preferredrfc822originator")
    	{
    		$cle2 = "Courriel";
    	}
    	if ($cle2 == "l")
    	{
    		$cle2 = "Ville";
    	}
    	if ($cle2 == "telephonenumber")
    	{
    		$cle2 = "Téléphone";
    	}
    	if ($cle2 == "pcmailtype")
    	{
    		$cle2 = "Serveur de mail";
    	}
    	if ($cle2 == "personaltitle")
    	{
    		$cle2 = "Civilité";
    	}
    	if ($cle2 == "direction")
    	{
    		$cle2 = "Direction";
    	}
    	if ($cle2 == "delegationtarget")
    	{
    		$cle2 = "Service";
    	}
    	if ($cle2 == "login")
    	{
    		$cle2 = "Identifiant de connexion";
    	}
    	return $cle2;
    }
    ?>
    le "sort($info);" à la ligne 60 ne sert à rien car le "sort" se fait sur les index de l'array qui sont déjà dans l'ordre (0,1,2,3...).
    Je ne sais pas comment écrire le multisort???
    Je veux pouvoir ordonner mon tableau par rapport au CN (Array [m][CN][p]), donc à la valeur de CN[0].
    Cordialement,
    vandman

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Pouvez-vous donner le résultat d'un var_dump du tableau ? (après en avoir modifié les données)
    Christophe

    Pensez à mettre quand c'est le cas.

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Personnellement, j'utiliserai plutôt usort en ayant pris soin d'enlever la clef "count" pour la remettre à la fin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $count = $arr['count'];
    unset($arr['count']);
     
    usort($arr, function ($a, $b) {
        if ($a['Surname'] == $b['Surname']) return 0;
        return ($a['Surname'] < $b['Surname']) ? -1 : 1;
    });
     
    $arr = ['count' => $count] + $arr;
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Merci à tous,
    J'ai fini par réussir.
    Usort fonctionne bien. Merci CosmoKnacki
    Pendant que vous me donniez la réponse avec Usort, j'ai élaborée une solution avec le "trie à bulle".

    Voici les deux solutions qui me permettent d'organiser le tableau en ordre croissant et décroissant:
    Trie Croissant "tri à bulles":
    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
    function TrieCroissant($Array,$NbligneTableau)
    {
    	$i = $NbligneTableau - 1;
    	while ($i > 1)
    	{
    		$z=1;
    		for ($j = 0; $j <= $i - 1; $j++)
    		{
    			if ($Array[$j]['cn'][0] > $Array[$j + 1]['cn'][0])
    			{
    				$TempArray = $Array[$j];
    				$Array[$j] = $Array[$j + 1];
    				$Array[$j + 1] = $TempArray;
    				$z = 0;
    			}
    		}
    		if ( $z == 1 )
    			{
    				$j = $i - 1;
    			}
    	$i--;
    	}
    return $Array;
    }
    Trie décroissant "tri à bulles":
    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
    function TrieDecroissant($Array,$NbligneTableau)
    {
    	$i = $NbligneTableau - 1;
    	while ($i > 1)
    	{
    		$z=1;
    		for ($j = 0; $j <= $i - 1; $j++)
    		{
    			if ($Array[$j]['cn'][0] < $Array[$j + 1]['cn'][0])
    			{
    				$TempArray = $Array[$j];
    				$Array[$j] = $Array[$j + 1];
    				$Array[$j + 1] = $TempArray;
    				$z = 0;
    			}
    		}
    		if ( $z == 1 )
    			{
    				$j = $i - 1;
    			}
    	$i--;
    	}
    return $Array;
    }
    Trie Croissant "usort":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function TriCroiss ($info)
    {
    	// Trie croissant du tableau sur les CN
    			$count = $info['count'];
    			unset($info['count']);
     			usort($info, function ($a, $b) {
        			if ($a['cn'][0] == $b['cn'][0])return 0;
        			return ($a['cn'][0] < $b['cn'][0]) ? -1 : 1;
    			});
     			$info = ['count' => $count] + $info;
     			return $info;
    }
    Trie Décroissant "usort":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function TriDecroiss ($info)
    {
    	// Trie decroissant du tableau sur les CN
    			$count = $info['count'];
    			unset($info['count']);
     			usort($info, function ($a, $b) {
        			if ($a['cn'][0] == $b['cn'][0])return 0;
        			return ($a['cn'][0] > $b['cn'][0]) ? -1 : 1;
    			});
     			$info = ['count' => $count] + $info;
     			return $info;
    }
    Cordialement,
    vandman

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/02/2007, 10h52
  2. Réponses: 5
    Dernier message: 04/10/2006, 18h49
  3. [Tableaux] Tableau multi dimensionnel
    Par gids01 dans le forum Langage
    Réponses: 7
    Dernier message: 02/10/2006, 16h18
  4. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 21h23
  5. Réponses: 4
    Dernier message: 24/08/2005, 14h09

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