Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2008, 22h50   #1
Membre éprouvé
 
Inscription : juin 2007
Messages : 347
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 347
Points : 404
Points : 404
Par défaut [Tableaux] tri tableau avec fonction

bonjour, je cherche le meilleur de trier cela :

S32 / S32,S41/ S22,S27 / S22,S31/ S22,S27,S26/ S22,S27,S24 /S32,S40

en
S32,
S32,S41
S32,S40
S22,S27
S22,S27,S26
S22,S27,S24
S22,S31
donc je rencontre S32, et regarde les autres S32,* je trouve S32,S41 avant S32,S40 et garde l'ordre. je passe au suivant, je rencontre, S22,S27 , le garde etc

je sais pas si je suis assez clair, en tout cas merci d'avance de vos lumières
ascito est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 01h47   #2
Membre régulier
 
Avatar de guigouz
 
Guillaume Zurbach
Étudiant
Inscription : mars 2008
Messages : 84
Détails du profil
Informations personnelles :
Nom : Guillaume Zurbach
Âge : 22
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 84
Points : 87
Points : 87
S'il s'agit d'un tableau, ce que tu cherches à faire devrait être facilement réalisé à l'aide de la fonction sort.
Plus d'infos ici

Bonne continuation
Guigouz
guigouz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 12h38   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Tu commences toujours par SXX ? ou est-ce que ton tableau peut commencer par SXX,YY ?
Autrement dit estce que les SXX,YY sont toujours après SXX ?

D'autre part, c'est quoi ton format de départ ? un tableau à 1 dimensions qui contient des chaines ?
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 20h38   #4
Membre éprouvé
 
Inscription : juin 2007
Messages : 347
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 347
Points : 404
Points : 404
le probleme de sort est qui me tri le tableau normalement, et j'obtiens 22,24 avant 22,26, normal.

Code :
Array ( [0] => S22,S27 [1] => S22,S31 [2] => S22,S27,S26 [3] => S22,S27,S24 [4] => S22,S27,S26,S25 [5] => S22,S27,S26,S30 [6] => S22,S31,S30 [7] => S22,S31,S30,S23 [8] => S22,S31,S30,S23,S25 [9] => S22,S31,S30,S23,S25,S28 [10] => )
en fait cela représente, une série d'id, après recherche dans une bdd.

il est important de respecter l'ordre de sortie, donc des clé.

L'idée serait de les réorganiser comme précédemment énoncer.

merci de vos participation, en tout cas
ascito est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 12h10   #5
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Essaie ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?php
 
$a = array("S32", "S32,S41", "S22,S27", "S22,S31", "S22,S27,S26", "S22,S27,S24", "S32,S40");
$n = count($a);
print_r($a);
 
$b = array();
for($i = 0 ; $i < $n ; ++$i) {
    $b[$i] = array_shift($a);
 
    $c = array();
    foreach($a as $index => $value) {
        if (substr($value, 0, strlen($b[$i])) == $b[$i]) {
            $c[] = $index;
        }
    }
    foreach($a as $index => $value) {
        if (substr($value, 0, strlen($b[$i])) != $b[$i]) {
            $c[] = $index;
        }
    }
    $d = array();
    foreach($c as $index) {
        $d[] = $a[$index];
    }
    $a = $d;
}
print_r($b);
?>
Les noms de variables sont quelques peu criptiques, mais en décortiquant le code ça devrait aller... faut bien que tu bosses aussi
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 13h48   #6
Membre éprouvé
 
Inscription : juin 2007
Messages : 347
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 347
Points : 404
Points : 404
Par défaut c bien on solutionne

merci de ta réponse, et du temps que tu y a passé, cela fonctionne tres bien,
j'ai planché aussi, et voila une seconde réponse, c à peu près la meme chose

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       $array= array("S22,S27","S22,S31","S22,S27,S26","S22,S27,S24","S22,S27,S26,S25","S22,S27,S26,S30","S22,S31,S30","S22,S31,S30,S23","S22,S31,S30,S23,S25","S22,S31,S30,S23,S25,S28");
 
          asort($array);
 
 
                       foreach ( $array as $key => $row) {
 
                if(strlen($row) == 7){
                $pos++;
                 }
                 $sort[$pos][$key]=$row;
 
              ksort($sort[$pos]);
                }
    print_r($sort);


voila si d'autres regardes nos codes, et y trouves des choses à améliorer, je suis toujours preneur,

merci
ascito est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 14h12   #7
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
ton code ne respecte visiblement pas ton cahier des charges; Voici ce qui sort:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [1] => Array
        (
            [0] => S22,S27
            [2] => S22,S27,S26
            [3] => S22,S27,S24
            [4] => S22,S27,S26,S25
            [5] => S22,S27,S26,S30
        )

    [2] => Array
        (
            [1] => S22,S31
            [6] => S22,S31,S30
            [7] => S22,S31,S30,S23
            [8] => S22,S31,S30,S23,S25
            [9] => S22,S31,S30,S23,S25,S28
        )

)
Les lignes en rouge ne devraient elles pas être ensembles ?
J'obtiens un résultat différent:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Array
(
    [0] => S22,S27
    [1] => S22,S27,S26
    [2] => S22,S27,S26,S25
    [3] => S22,S27,S26,S30
    [4] => S22,S27,S24
    [5] => S22,S31
    [6] => S22,S31,S30
    [7] => S22,S31,S30,S23
    [8] => S22,S31,S30,S23,S25
    [9] => S22,S31,S30,S23,S25,S28
)
__________________
Get your motor runnin'
Head out on the highway...
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 14h21   #8
Membre éprouvé
 
Inscription : juin 2007
Messages : 347
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 347
Points : 404
Points : 404
Par défaut et oui ,

ouais, après avoir comparé les résultat, j'ai aussi vu la faille, je planche

cela dit, c'est vrai que je ne voi pas d'autre solution, que le parcours du tableau en for foreach, ton code, est niquel
ascito est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h23.


 
 
 
 
Partenaires

Hébergement Web