Code source d'une fonction fournie par PHP (sort())? [Résolu]

zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention - 12 avril 2007 à 14:11 - Dernière réponse : zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention
- 13 avril 2007 à 19:59
Salut!

J'ai besoin de récupérer le code source de la fonction sort() fournie par php. Comment puis-je l'obtenir?

Mon problème est le suivant : j'ai deux tableaux, un avec des num téléphone, l'autre avec les prénoms correspondants (environ 10 000 entrées dans le tableau...)

J'ai besoin de trier cette liste, soit par prénom, soit par nom. Donc si je tri un tableau, il faut à chaque fois que le deuxième lui corresponde.

Je ne peux donc pas utiliser la fonction sort de php. J'ai donc fait une fonction de tri, qui met 30 fois plus de temps que celle de php... snif!

Si quelqu'un peut me dire ce qu'utilise php pour son tri (quick sort, fast quicksort, bubble sort ... ou encore un truc meilleur...), ce serait super sympa!!!!

Merci à tous
Afficher la suite 

11 réponses

Répondre au sujet
zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention - 12 avril 2007 à 23:48
+3
Utile
Voilmà, merci à tous pour votre aide!
J'ai trouvé la solution :

array_multisort($num_port, $nom_port);
Il va trier les deux tableaux en fonction des valeurs du premier tableau, puis celles du deuxième en cas de doublons dans le premier tableau.

+++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de zoukozouko
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 12 avril 2007 à 14:48
0
Utile
Salut... Le code source des fonctions PHP ?!? Se sont des librairies certainement écrites en C++...

Pourquoi ne pas utiliser

asort
(PHP 4, PHP 5)

asort — Sort an array and maintain index association

(va faire un tour sur www.php.net)
Commenter la réponse de J_G
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 12 avril 2007 à 14:50
0
Utile
array_multisort

(PHP 4, PHP 5)


array_multisort — Sort multiple or multi-dimensional arrays




Description
bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $...]]] )

Returns <tt>TRUE</tt> on success or <tt>FALSE</tt> on failure.


array_multisort() can be used to sort several
arrays at once, or a multi-dimensional array by one or more
dimensions.



Associative (string) keys will be maintained, but numeric
keys will be re-indexed.



The input arrays are treated as columns of a table to be sorted
by rows - this resembles the functionality of SQL ORDER BY
clause. The first array is the primary one to sort by. The rows
(values) in that array that compare the same are sorted by the
next input array, and so on.



The argument structure of this function is a bit unusual, but
flexible. The first argument has to be an array. Subsequently,
each argument can be either an array or a sorting flag from the
following lists.



Sorting order flags:


<li><tt>SORT_ASC</tt> - Sort in ascending order</li><li><tt>SORT_DESC</tt> - Sort in descending order</li>

Sorting type flags:


<li><tt>SORT_REGULAR</tt> - Compare items normally</li><li><tt>SORT_NUMERIC</tt> - Compare items numerically</li><li><tt>SORT_STRING</tt> - Compare items as strings</li>

No two sorting flags of the same type can be specified after each
array. The sorting flags specified after an array argument apply
only to that array - they are reset to default <tt>SORT_ASC</tt> and
<tt>SORT_REGULAR</tt> before each new array argument.
Commenter la réponse de J_G
vilhjalms 591 Messages postés mercredi 20 juillet 2005Date d'inscription 16 juillet 2009 Dernière intervention - 12 avril 2007 à 16:43
0
Utile
Saell og blesuð

Un simple http://www.php.net ou http://fr.php.net/manual/fr/function.sort.php aurait suffit non ? :)



Vilhjálms


Sigurðsdóttir aka Frëyjá
Commenter la réponse de vilhjalms
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 12 avril 2007 à 17:13
0
Utile
Bof... pas plus long que copier coller
Commenter la réponse de J_G
zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention - 12 avril 2007 à 17:21
0
Utile
Evidement, je ne suis pas venu poster ma question sans avoir chercher avant...
J'avais surtout besoin d'une explication de l'explication.

Tout aurait plus simple si j'avais le code de la fonction sort, mais aparement j'en ai pas besoin.

je dois donc utiliser array_multisort, mais je suis pas ssûr de comprendre comment ça marche.
J'ai donc $tab_num qui contient les numéros, $tab_nom qui contient les noms.


$tab_num[0] = 0603030303 $tab_nom[0] = Arnaud

$tab_num[1] = 0602020202 $tab_nom[1] = Xavier

$tab_num[2] = 0601010101 $tab_nom[2] = Paul

Alors si je fais array_multisort($tab_num, $tab_nom);
j'obtiens bien :


$tab_num[0] = 0601010101 $tab_nom[0] = Paul
$tab_num[1] = 0602020202 $tab_nom[1] = Xavier

$tab_num[2] = 0603030303 $tab_nom[2] = Arnaud

???

Il va pas me ressortir les deux tableaux triés 1 à 1???
Et la syntaxe de la fonction est bonne comme je l'ai écrite, parce que ça ressemble pas du tout au prototype donné par la doc...

Merci.
Commenter la réponse de zoukozouko
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 12 avril 2007 à 17:40
0
Utile
<< Il va pas me ressortir les deux tableaux triés 1 à 1??? >>

Qu'entends-tu par là ?

En plus le résultat que tu me présentes plus haut semble parfait... Non ? Tout est bien, tu as trié les numéro (premier tableau présenté) et les noms on suivit... réindexation correcte! Non?

Bon, mais si ton problème se limite à deux tableaux (num+nom), tu peux choisir de les combiner en un seul (num en clefs et noms en valeurs)

<?php

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);
?>

The above example will output:

Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)

Puis utiliser un ksort pour trier par les num ou un asort pour trier par les noms... ATTENTION que les numéros soit bien unique pour chaque nom!!!

Quel est le pb ?
Commenter la réponse de J_G
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 12 avril 2007 à 19:45
0
Utile
"Tout aurait plus simple si j'avais le code de la fonction sort, mais aparement j'en ai pas besoin."
Fonction C/C++ on vient de te dire. Donc inutilisable via PHP ! C'est pour ca que d'autres fonctions existent !

De toute facon, si t'as 2 tableaux pour gérer la même chose, y'a un problème de conception.
Fusionne tes tableaux pour commencer.
      
Commenter la réponse de FhX
zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention - 12 avril 2007 à 22:51
0
Utile
"Fonction C/C++ on vient de te dire. Donc inutilisable via PHP ! C'est pour ca que d'autres fonctions existent !"
Je vois pas pourquoi c'est "inutilisable" en PHP. Meme si y a une lib C compilée qui est utilisée par PHP, le code existe, et donc on pourrait retranscrire en PHP...
D'ailleur le langage PHP est quand même super inspiré du C....
Bon toute façon j'ai bien admis que j'avais pas besoin de connaitre le code.

Ensuite, 565117 J_G, merci de ta réponse.
Alors pour ta question, par "trier les tableaux 1 à 1", j'entendais trier le premier puis trier le deuxième.
Mois j'utilise les deux tableaux comme une base de données :
J'ai une colonne num, une colonne nom.
Evidement, quand tu changes l'ordre d'une colonne, l'autre colonne doit changer aussi puisque les num doivent correspondre toujours aux même noms (logique).
La solution que tu m'as proposé me parait intéressante, je vais essayer ça.

Sinon FHX me signal un problème de conception, c'est probable.

Si je crée un tableau à deux dimentions, est-ce que je peux trier le tableau selon une colonne que je choisis?

exemple :
$tab[0][0] = 0603030303;
$tab[0][1] = Arnaud;

$tab[1][0] = 0602020202;
$tab[1][1] = Xavier;

$tab[2][0] = 0601010101;
$tab[2][1] = Paul;

Comment je dois utiliser la fonction array_multisort pour obtenir le tri selon la premiere colonne (les numéros)?

PS: "En plus le résultat que tu me présentes plus haut semble parfait... Non ?"
Enfait c'était une question, j'ai rien obtenu du tout. Je voulais juste qu'on m'indique la syntaxe de la fonction, je comprends pas du tout le
"bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $...]]] )"

Il me faudrait simplement la ligne à écrire du style :
array_multisort($tab, 0);

Merci encore pour votre aide!!!
Commenter la réponse de zoukozouko
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 13 avril 2007 à 18:32
0
Utile
Meme si y a une lib C compilée qui est utilisée par PHP, le code existe, et donc on pourrait retranscrire en PHP...

Ca sert à rien de coder une fonction pour trier un tableau alors que les fonctions existes déja :)
C'est ca qu'on essaye de te dire ! ^^
Commenter la réponse de FhX
zoukozouko 148 Messages postés dimanche 25 janvier 2004Date d'inscription 21 janvier 2009 Dernière intervention - 13 avril 2007 à 19:59
0
Utile
B la pour le coup, ca sert à rien puisque la fonction qui fait exctement ce que je veux existe.
Sinon, juste pour un tri, ca m'aurait pas bien déranger de retranscrire le C en PHP.
D'autant plus que j'ai reussi à trouver toutes les fonctions C de PHP, j'allais commencer à transcrire...
J'ai donc économisé une bonne heure de mon temps. En plus, rien ne me garantissait qu'en retrancrivant le code, PHP irait aussi vite que C, ce qui m'étonnnerait pas mal (rien que pour la gestion des variables...).

En tou cas merci!
Commenter la réponse de zoukozouko

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.