begin process at 2012 05 31 11:11:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Tri array sur une colonne non nommé


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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(
"/&aacute;|&agrave;|&acirc;|&atilde;|&auml;|&aring;|
&Aacute;|&Agrave;|&Acirc;|&Atilde;|&Auml;|&Aring;/",
"/&aelig;|&AElig;/",
"/&ccedil;|&Ccedil;/",
"/&eacute;|&egrave;|&ecirc;|&euml;|
&Eacute;|&Egrave;|&Ecirc;|&Euml;/",
"/&igrave;|&iacute;|&icirc;|&iuml;|
&Igrave;|&Iacute;|&Icirc;|&Iuml;/",
"/&ntilde;|&Ntilde;/",
"/&ograve;|&oacute;|&ocirc;|&otilde;|&ouml;|&oslash;|
&Ograve;|&Oacute;|&Ocirc;|&Otilde;|&Ouml;|&Oslash;/",
"/&oelig;|&OElig;/",
"/&szlig;/",
"/&ugrave;|&uacute;|&ucirc;|&uuml;|
&Ugrave;|&Uacute;|&Ucirc;|&Uuml;/",
"/&yacute;|&yuml;|&Yacute;/");
$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


1 2

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" =>


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales