Code source d'une fonction fournie par PHP (sort())?

Résolu
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009 - 12 avril 2007 à 14:11
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009 - 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

11 réponses

zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
12 avril 2007 à 23:48
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.

+++
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 avril 2007 à 14:48
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)
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 avril 2007 à 14:50
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.
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
12 avril 2007 à 16:43
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á
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 avril 2007 à 17:13
Bof... pas plus long que copier coller
0
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
12 avril 2007 à 17:21
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.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
12 avril 2007 à 17:40
<< 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 ?
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
12 avril 2007 à 19:45
"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.
      
0
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
12 avril 2007 à 22:51
"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!!!
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
13 avril 2007 à 18:32
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 ! ^^
0
zoukozouko Messages postés 148 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 21 janvier 2009
13 avril 2007 à 19:59
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!
0
Rejoignez-nous