Accueil > Forum > > > > Tri array sur une colonne non nommé
Tri array sur une colonne non nommé
mardi 1 septembre 2009 à 11:25:28 |
Tri array sur une colonne non nommé

Valentino
|
Bonjour à tous,
Je cherche à trier un tableau sur la 4ème colonne qui n'a pas de "nom" de colonne... pouvez vous m'aider svp ? Merci d'avance
J'ai essayé d'utiliser array_multisort sans succès :(
Exemple :
$pays[]=Array('Canada',6,true,'Amérique');
$pays[]=Array('France',1,false,'Europe');
$pays[]=Array('Mexique',5,false,'Amérique');
$pays[]=Array('Espagne',2,false,'Europe');
$pays[]=Array('Angleterre',3,true,'Europe');
$pays[]=Array('Etats-Unis',4,false,'Amérique');
$pays[]=Array('Brésil',7,false,'Amérique');
Dans ce tableau je souhaite que le principal tri s'effectue sur la 4ème colonne et un tri secondaire sur la 1ère colonne (avec possibilité de ASC DESC)
Je précise que je ne souhaite pas nommer les colonnes afin d'être généraliste par rapport au contenu.
|
|
mardi 1 septembre 2009 à 13:35:22 |
Re : Tri array sur une colonne non nommé

Tonio_35
|
Peut être un début de réponse...
J'utilise cette class que j'ai trouvée ici : http://www.php.net/manual/fr/function.usort.php dans les exemples puis modifiée pour en autres supporter les jeux de caractères avec accents...
En revanche le tri se fait que sur un niveau... Mais en passant par des sous-tableaux...
Code PHP : <?php
/*
Class trouvée ici : http://www.php.net/manual/fr/function.usort.php
Modifiée pour supporter les jeux de caractères avec accents
*/
class ObjSorter
{
var $property;
var $sorted;
var $order;
function ObjSorter($objects_array,$property=null, $order="asc")
{
$order=strtoupper($order);
switch($order)
{
case "DESC":
break;
default:
$order="ASC";
break;
}
$this->order = $order;
$sample = $objects_array[0];
$vars = get_object_vars($sample);
if (isset($property))
{
if (isset($sample->$property))
{
$this->property = $property;
usort($objects_array, array($this,'_compare'));
}
else
{
$this->sorted = false;
return;
}
}
else
{
list($property,$var) = each($sample);
$this->property = $property;
usort($objects_array, array($this,'_compare'));
}
$this->sorted = ($objects_array);
}
function _compare($apple, $orange)
{
$property = $this->property;
if ($this->collatedLower($apple[$property]) == $this->collatedLower($orange[$property])) return 0;
$order = $this->order;
if($order=="DESC")
return ($this->collatedLower($apple[$property]) > $this->collatedLower($orange[$property])) ? -1 : 1;
return ($this->collatedLower($apple[$property]) < $this->collatedLower($orange[$property])) ? -1 : 1;
}
function collatedLower($string) {
$string=strtolower($string);
$patterns = array(
"/á|à|â|ã|ä|å|
Á|À|Â|Ã|Ä|Å/",
"/æ|Æ/",
"/ç|Ç/",
"/é|è|ê|ë|
É|È|Ê|Ë/",
"/ì|í|î|ï|
Ì|Í|Î|Ï/",
"/ñ|Ñ/",
"/ò|ó|ô|õ|ö|ø|
Ò|Ó|Ô|Õ|Ö|Ø/",
"/œ|Œ/",
"/ß/",
"/ù|ú|û|ü|
Ù|Ú|Û|Ü/",
"/ý|ÿ|Ý/");
$replace = array('a', 'ae', 'c', 'e', 'i', 'n', 'o', 'oe', 'ss', 'u', 'y');
return preg_replace($patterns,$replace,$string);
}
}
$pays[]=Array('Canada',6,true,'Amérique');
$pays[]=Array('France',1,false,'Europe');
$pays[]=Array('Mexique',5,false,'Amérique');
$pays[]=Array('Espagne',2,false,'Europe');
$pays[]=Array('Angleterre',3,true,'Europe');
$pays[]=Array('Etats-Unis',4,false,'Amérique');
$pays[]=Array('Brésil',7,false,'Amérique');
$objects = new ObjSorter($pays,3, "ASC");
print_r($objects->sorted);
/*
Array
(
[0] => Array
(
[0] => Canada
[1] => 6
[2] => 1
[3] => Amérique
)
[1] => Array
(
[0] => Mexique
[1] => 5
[2] =>
[3] => Amérique
)
[2] => Array
(
[0] => Brésil
[1] => 7
[2] =>
[3] => Amérique
)
[3] => Array
(
[0] => Etats-Unis
[1] => 4
[2] =>
[3] => Amérique
)
[4] => Array
(
[0] => Espagne
[1] => 2
[2] =>
[3] => Europe
)
[5] => Array
(
[0] => France
[1] => 1
[2] =>
[3] => Europe
)
[6] => Array
(
[0] => Angleterre
[1] => 3
[2] => 1
[3] => Europe
)
)
*/
?>
|
|
mardi 1 septembre 2009 à 13:51:30 |
Re : Tri array sur une colonne non nommé

Tonio_35
|
La ca marche ca ! mais ca fait un peut usine a gaz...
Code PHP :
<?php
$pays[]=Array('Canada',6,true,'Amérique');
$pays[]=Array('France',1,false,'Europe');
$pays[]=Array('Mexique',5,false,'Amérique');
$pays[]=Array('Espagne',2,false,'Europe');
$pays[]=Array('Angleterre',3,true,'Europe');
$pays[]=Array('Etats-Unis',4,false,'Amérique');
$pays[]=Array('Brésil',7,false,'Amérique');
$objects = new ObjSorter($pays,3, "ASC");
$i=0;
$temparr = array();
foreach($objects->sorted as $pays)
{
if(!isset($lastcont))
{
$temparr[$i] = array();
$lastcont = $pays[3];
array_push($temparr[$i], $pays);
}
elseif($lastcont != $pays[3])
{
$tmpobj = new ObjSorter($temparr[$i],0, "ASC");
$temparr[$i] = $tmpobj->sorted;
$i++;
$temparr[$i] = array();
array_push($temparr[$i], $pays);
$lastcont = $pays[3];
}
else
{
array_push($temparr[$i], $pays);
}
}
$tmparray = array();
for($t=0; $t<=$i;$t++)
{
$tmparray = array_merge($tmparray, $temparr[$t]);
}
print_r($tmparray);
/*
Array
(
[0] => Array
(
[0] => Brésil
[1] => 7
[2] =>
[3] => Amérique
)
[1] => Array
(
[0] => Canada
[1] => 6
[2] => 1
[3] => Amérique
)
[2] => Array
(
[0] => Etats-Unis
[1] => 4
[2] =>
[3] => Amérique
)
[3] => Array
(
[0] => Mexique
[1] => 5
[2] =>
[3] => Amérique
)
[4] => Array
(
[0] => Espagne
[1] => 2
[2] =>
[3] => Europe
)
[5] => Array
(
[0] => France
[1] => 1
[2] =>
[3] => Europe
)
[6] => Array
(
[0] => Angleterre
[1] => 3
[2] => 1
[3] => Europe
)
)
*/
?>
_________________________________
Min iPomme
|
|
mardi 1 septembre 2009 à 14:06:18 |
Re : Tri array sur une colonne non nommé

Valentino
|
Merci Tonio_35 :)
Effectivement cela fonctionne mais tu as raison c'est une usine à gaz !
Je suis surpris tout de même qu'il n'y ait pas beaucoup pus simple...
En tout cas en attendant cela fera l'affaire mais je laisse ouvert le post au cas quelqu’un aurait mieux (plus compréhensible, malléable et simple).
|
|
mardi 1 septembre 2009 à 14:23:03 |
Re : Tri array sur une colonne non nommé

Valentino
|
par contre je viens de m'apperçevoir qu'il y a une erreur (Invalid argument supplied for foreach()) sur le foreach($objects->sorted as $pays)...
Tu a une idée ? pour être franc je n'ai pas encore regardé en détail ton ta class ObjSorter
|
|
mardi 1 septembre 2009 à 14:29:05 |
Re : Tri array sur une colonne non nommé

Tonio_35
|
MmmmMmmm...
Php version 5 ?
_________________________________
Min iPomme
|
|
mardi 1 septembre 2009 à 14:55:04 |
Re : Tri array sur une colonne non nommé

Valentino
|
Oui tu as raison j'ai oublié de te préciser qu'il faut que je soit compatible php 4.3.8
Beaucoup de contrainte je sais ^_^
|
|
mardi 1 septembre 2009 à 16:20:24 |
Re : Tri array sur une colonne non nommé

syndrael
|
Voila à quoi servent les nouvelles versions.. compléter des besoins, dans le cas présent un besoin de tri.
Au delà de ça, je dirai qu'une structure de donnée doit être construire autour de son utilisation. Le langage objet peut servir à créer des 'conteneurs' et les manipuler plus aisément.
C'était la minute philosophique du jour.
S.
|
|
mardi 1 septembre 2009 à 17:29:27 |
Re : Tri array sur une colonne non nommé

Valentino
|
D'accord pour la réponse Syndrael, cependant en ce qui me concerne les maj sont malheureusement impossible, nous avons un parc de serveur sur lesquels des problèmes de dépendance persistent... il va falloir que je fasse avec.
|
|
mercredi 2 septembre 2009 à 10:06:32 |
Re : Tri array sur une colonne non nommé

Tonio_35
|
Rendre le code compatible php4 doit être largement faisable... Essai déjà :
var $sorted = array();
dans la classe à la place de
var $sorted;
Ou alors fais en sorte de ne pas renvoyer un objet mais un tableau...
_________________________________
Min iPomme
|
|
Cette discussion est classée dans : tri, colonne, array, false, pays
Répondre à ce message
Sujets en rapport avec ce message
tri tableau par un lien sur entête de colonne [ par mezees ]
bonjour,je cherche un script qui me permettrait :- d'afficher dans une page, un tableau qui vient d'une base sql (ça je sais faire...)- d'avoir sur ce
tri tableau 2 dimensions [ par lebobby ]
Bonjour je voudrais savoir comment je pourrais faire pour trier ce tableau :$tab[0]=array("i"=>"23", "c" => "rge", "date" =>'2002-08-03 12:00:00');$ta
tri d'un array [ par Tartuffe ]
Bonjour, j'ai un array qui a cette forme : $variable[0]=(1134, 10, 100, 56) $variable[1]=(1115, 10, 101, 312) $variable[2]=(25, 8, 100, 75) $variabl
tri sur 2 tableaux .... [ par djagger ]
Salut !Voici mon problème.J'ai 2 tableaux, correspondant à des noms et les id associées à ces noms:$mesNoms=array();$mesNoms[0]="FFF";$mesNoms[1]="DDD
Tri de résultat sql en suprimmant les doublons. [ par Bowlman ]
bonjours,je vous soumet mon problème.J'ai une table MySQL dans laquelle j'ai les villes , codes postaux provinces et pays.j'ai affiché une liste dérou
Tri de array, complexe [ par zen69 ]
Salut a tous!J'utilise des array à multi niveaux pour stoker de l'informations sur des medias.Je voudrais une fois toutes l'informations entrer dans l
récupérer les valeurs d'une colonne d'une table pour les mettre dans un array [ par baignassou ]
Bnjour,Je cherche a récupérer dans un array la valeur d'un champ dans une table, mais ceci pour tous les enregistrements.De façon a proposer une liste
Tri multi-dimensionnel [ par Aline77 ]
Bonjour,J'ai un tableau :Array( [10900] => Array ( [nom] => Aline &nbs
Tri multicritère [ par Evangun ]
Bonsoir à tous,je galère un peu pour réussir à trier des fichiers par ordre alphabétique et par type de fichier en même temps, comme le fait windows p
probleme avec tableau associatif [ par arginine ]
Bonjour, J'ai un probleme relativement stupide pour "construire" un tableau associatif avec plusieurs colonnes: // exemple$tab = array( "fichier" =>
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|