Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/11/2014, à 16:25

Tomzz

[Résolu]sort sur tableau PHP

Bonjour,
Je tente de faire un tri sur une variable tableau provenant d'une base de données avec le code suivant:

$compte = $bdd->query('SELECT lieu FROM Osa_rss ORDER BY lieu');
					$fix = array("à ", "Secteur "); // Mots à supprimer dans les entrées du tableau 
					while ($combien = $compte->fetch())
					{
						$lieu[$d] = trim(str_replace($fix, "", str_replace("_", " ", $combien['lieu']))); // Je supprime les mots à supprimer et je met les valeurs de la bdd dans un tableau
						$d++;
					}
					$lieux = array_merge(array_unique($lieu)); // Je supprime les doublons et je renumérote les clés du tableau
					var_dump($lieux); // Résultat position 1
					$lieux = sort($lieux, SORT_REGULAR); // Je tri (du moins j'essai)
					echo '<br>';
					var_dump($lieux); // Résultat position 2

Mais ça ne marche pas.
Le var_dump en position 1 me retourne ce que j'attends, à savoir:

array(62) { [0]=> string(12) "AIGUES-VIVES" [1]=> string(5) "AUNAT" [2]=> string(8) "AUTERIVE" [3]=> string(14) "AX-LES-THERMES" [4]=> string(7) "BELESTA" [5]=> string(19) "BELLEGARDE-DU-RAZES" [6]=> string(6) "BELVIS"... } 

Mais le var_dump de la position 2 me retourne simplement:

bool(true)

Alors que je voudrai la même chose que position 2 mais classé par ordre alphabétique.
Je ne peux pas classer directement depuis la requête bdd seulement car les mots que je supprime après (Secteur et à) modifient le classement.

Qu'est ce que je rate ?

PS: le but du jeu est de générer ensuite un nuage de mots.
Mon code fonctionne sans le sort, mais les entrées commençant par "Secteur" se retrouvent en fin de liste.

Pour voir le résultat sans sort, c'est ici http://www.agence-libre.fr/agences/filtre.php puis cocher la case Filtre par villes.

Dernière modification par Tomzz (Le 27/11/2014, à 16:34)

Hors ligne

#2 Le 27/11/2014, à 16:37

Tomzz

Re : [Résolu]sort sur tableau PHP

Alors, j'ai compris en écrivant ce post roll
Je ne dois pas mettre le résultat de sort dans une variable, sort agit directement sur la variable:

$lieux = sort($lieux, SORT_REGULAR);

est faux, il suffit de faire:

sort($lieux, SORT_REGULAR);

voir, dans mon cas, simplement:

sort($lieux);

Voilà comment perdre 2h sur une cone... que j'avais d'ailleurs évité ailleurs il y a quelques jours.

Hors ligne

#3 Le 28/11/2014, à 09:17

HP

Re : [Résolu]sort sur tableau PHP

Tomzz a écrit :

Voilà comment perdre 2h sur une cone...

Les joies de PHP wink.


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#4 Le 29/11/2014, à 09:58

HP

Re : [Résolu]sort sur tableau PHP

Accessoirement, là, je bossais à la conception d'une classe permettant de faire des trucs genre :

$fruits = Dict::make(['Orange20', 'orange3', 'Orange2', 'orange1']);
$fruits->sort(SORT_NATURAL|SORT_FLAG_CASE);

ou encore (avec une Closure):

$fruits->sort(function($a, $b) {
        list($a, $b) = [strtolower($a), strtolower($b)];
        return ($a == $b)
            ? 0
            : ($a < $b) ? -1 : 1;
    });

Le deuxième exemple peut évidemment être remplacé par un :

$fruits->sort(SORT_STRING|SORT_FLAG_CASE);

Ces exemples sont issus des tests unitaires… donc assez peu pertinents wink.

Cependant, on peut aussi chaîner et, donc, arriver facilement à des trucs tels que :

$dict->sort(SORT_NATURAL|SORT_FLAG_CASE)->last();
$dict->sort(SORT_NATURAL|SORT_FLAG_CASE)->values()->get(3);
'Orange20'

cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne