Pages : 1
#1 Le 27/11/2014, à 15: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, à 15:34)
Hors ligne
#2 Le 27/11/2014, à 15:37
- Tomzz
Re : [Résolu]sort sur tableau PHP
Alors, j'ai compris en écrivant ce post
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, à 08:17
- HP
Re : [Résolu]sort sur tableau PHP
Voilà comment perdre 2h sur une cone...
Les joies de PHP .
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#4 Le 29/11/2014, à 08: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 .
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
Pages : 1