IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Dupliquer l'ordre d'un array vers un autre


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 17
    Points
    17
    Par défaut Dupliquer l'ordre d'un array vers un autre
    Bonjour,
    J'ai les deux array suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql = array(
    0 => "colonneC", 
    1 => "colonneA",
    2 => "colonneB"
    );
     
    $data = array(
    0 => array("sql" => "colonneB"), 
    1 => array("sql" => "colonneC"),
    2 => array("sql" => "colonneA")
    );
    Je souhaiterai obtenir l'array $newData avec l'ordre des keys $sql, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $newData = array(
    0 => array("sql" => "colonneC"),
    1 => array("sql" => "colonneA"), 
    2 => array("sql" => "colonneB")
    );
    Je m'arrache les cheveux

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je pense que ton exemple est mal formulé car le premier tableau seul permet de produire ton tableau final : tu ne fais que rajouter la clef "sql" devant la valeur existante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($sql as $key=>$value) {
        $newData[$key] = array('sql'=>$value);
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Si la valeur de la clé n'est pas toujours sql. Il y a peut être une fonction php qui fait tout ça, mais je n'ai pas le temps de chercher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    $sql = array(
    0 => "colonneC", 
    1 => "colonneA",
    2 => "colonneB"
    );
     
    $data = array(
    0 => array("sql" => "colonneB"), 
    1 => array("sql" => "colonneC"),
    2 => array("sql" => "colonneA")
    );
     
    $newData = array();
     
    foreach($sql as $key => $value) 
    {
     reset($data);
     foreach($data as $key2 => $value2)
     {
        $a = array_search($value,$value2); 
        if ($a !== false) 
        {
    	$newData[] = $data[$key2];
        }
     }
    }
    print_r($newData);
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Array
    (
        [0] => Array
            (
                [sql] => colonneC
            )
     
        [1] => Array
            (
                [sql] => colonneA
            )
     
        [2] => Array
            (
                [sql] => colonneB
            )
     
    )
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    il faudrait que vous nous montriez un autre exemple alors pour bien comprendre ce que vous souhaitez.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses.
    Celle de badaze me semble la plus adapté.

    J'avais effectivement pensé à une double boucle pour créer un troisième array mais je me disais qu'il y avait peut être une fonction native à php pour faire ça... Ou à l'aide de usort... Mais c'est peut être aussi simple comme ça...

    Le premier array intègre tous les noms des colonnes d'une table de ma base.
    Le second array est multidimensionnel et reprend (entre autres) certaines colonnes dans un ordre différent que je ne peux pas modifier. La clé "sql" du second array est toujours la même.
    Je souhaiterai obtenir un troisième array qui reprend toutes les données du second array dans l'ordre du premier array en comparant le nom des colonnes.


    Je fais souvent des doubles boucles pour finir par me rendre compte qu'il y avait une fonction native toute simple...
    Si jamais il y a une autre solution que la double boucle je suis preneur

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Après tout dépend du nombre de postes que tu as dans les tableaux. Si tu en as des centaines ça vaut le coup de chercher s'il existe une fonction ad-hoc si c'est pour trier les noms de colonnes d'une table ça ne sert à rien.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 17
    Points
    17
    Par défaut
    J'ai 57 clés dans le premier array et 51 dans le second.. Effectivement ça vaut surement pas le coup de trop chercher à optimiser.

    Tiens d'ailleurs, je me suis souvent demandé si le fait d'utiliser une fonction ad-hoc permettait vraiment d’accélérer un script.
    Par exemple avec array_search :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $array = array("toto", "tata", "tutu");
    if ( ($key = array_search("tata",$array)) !== FALSE ) echo $key;
    En comparaison avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $array = array("toto", "tata", "tutu");
    for ($key=0; $key < count($array); $key++) { 
    	if ($array[$key] != "tata") continue;
     
    	echo $key;
    	break;
    }
    Le premier script est plus simple à écrire et à relire mais sur le plan technique est ce que ça change vraiment quelque chose ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Dupliquer des formules d'une feuille vers les autres feuilles du classeur
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/07/2014, 16h25
  2. Dupliquer une requete d une base vers une autre
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/07/2010, 13h09
  3. problème pour dupliquer un clip enfant vers un autre clip
    Par markool dans le forum ActionScript 1 & ActionScript 2
    Réponses: 5
    Dernier message: 09/12/2009, 10h20
  4. Tansférer les données d'un array vers une listview
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2009, 19h42
  5. Array vers une table SQL
    Par cnaboul dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/12/2008, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo