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 :

Fonction sur les tableaux


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Fonction sur les tableaux
    Salut à tous,

    Je rencontre une difficulté mineure.

    En resumé, j'ai un tableau existant contenant 40 valeurs . je souhaite crée un deuxieme tableau à partir du premier qui reunirait les valeurs deux par deux et qui contiendrait donc 20 valeurs.

    Voici mon code

    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
    29
    30
    31
    32
    33
    34
    35
     
     
    <?php
     
     
     
    $a = array('DC', '00', '04', '01','2C', '01', '5E' ,'01', '90', '01', 'F4', '01', '58', '02', 'BC' , '02', '52', '03', 'E8', '03', 'BO', '04', 'DC', '05', '6C', '07', '60', '09', '54', '0B', '48', '0D' , '04', '10', 'EC', '13', '00', '19', 'A4', '1F');
     
     
    echo 'le tableau initial comprend '.count($a).' valeurs. <BR />';
     
    foreach ($a as $value) {
     
    	echo $value.'<BR />';
     
    }
     
     
     
    $b = array ();
    for ($i=0,$s=count($a);$i<$s;$i++){
     
     $b[]=$a[$i] .' '.$a[$i++];
     
    }
     
    echo ' Le tableau correspondant  compte '.count($b).' valeurs.<BR />';
     
    foreach ($b as $value) {
     
    	echo $value.'<BR />';
     
    }
     
    ?>
    Or le nouveau tableau ainsi crée est faux. Merci de m'expliquer en quoi réside mon erreur ?

  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
    L'incrémentation doit être avant l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $b[]=$a[$i] .' '.$a[++$i];

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    c'etait aussi con ;

    Peux tu juste expliciter en langage pour bebette ?

    car pour moi ça donnait

    $b [ valeur 0] = $a[valeur0]. ' '.$a[valeur1] ;


    et pour ajouter un peu de difficultés, est il possible d'inverser les valeurs quand on les recupere deux par deux genre

    $b[valeur0] = $a[valeur1].' '.$a[valeur2];

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    plus rapide :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $aa	= array_chunk( $a, 2 );
     
    foreach( $aa as $aaa)
    {
    	$b[]	= implode( ' ', $aaa );
    }
    On obtient :
    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
    Array
    (
        [0] => DC 00
        [1] => 04 01
        [2] => 2C 01
        [3] => 5E 01
        [4] => 90 01
        [5] => F4 01
        [6] => 58 02
        [7] => BC 02
        [8] => 52 03
        [9] => E8 03
        [10] => BO 04
        [11] => DC 05
        [12] => 6C 07
        [13] => 60 09
        [14] => 54 0B
        [15] => 48 0D
        [16] => 04 10
        [17] => EC 13
        [18] => 00 19
        [19] => A4 1F
    )

  5. #5
    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
    Peux tu juste expliciter en langage pour bebette ?
    $i++ retourne la valeur actuelle de $i puis l’incrémente
    ++$i incrémente $i puis retourne la nouvelle valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $i = 1;
    echo $i++; // 1
    echo $i; // 2
    echo ++$i; // 3

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $x = array_map(function($v) { return implode(' ', $v); }, array_chunk($a, 2));
    si les espaces ne sont pas nécessaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $x = array_map('implode', array_chunk($a, 2));

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    merci sabotage pour ton explication avec exemple de cette question de syntaxe.

    Merci à vous autre pour la deuxieme solution. Juste question puerement informative, quelle est la solution la plus couteuse en terme de performance sur un serveur ?

    Par ailleurs pour complexifier, est il possible de changer l'ordre des valeurs dans mon second tableau

    Au lieu d'avoir ce tableau :

    $b[0] = "DC 00";
    $b[1] = "04 01";

    d'avoir plutot :

    $b [0] = "00 DC";
    $b [1] = "01 04";

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il existe un tas de fonctions pour les array dans le manuel PHP.

    Il sufit de se servir... et de savoir s'en servir.

    Exemple ici : array_reverse()

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $a = array('DC', '00', '04', '01','2C', '01', '5E' ,'01', '90', '01', 'F4', '01', '58', '02', 'BC' , '02', '52', '03', 'E8', '03', 'BO', '04', 'DC', '05', '6C', '07', '60', '09', '54', '0B', '48', '0D' , '04', '10', 'EC', '13', '00', '19', 'A4', '1F');
     
    $aa	= array();
    $aa	= array_chunk( $a, 2 );
     
    $b	= array();
    foreach( $aa as $aaa)
    {
    	$b[]	= implode( ' ', array_reverse($aaa) );
    }

    ou en version courte :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    $b	= array_map(function($v) { return implode(' ', array_reverse($v)); }, array_chunk($a, 2));

    On obtient
    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
    Array
    (
        [0] => 00 DC
        [1] => 01 04
        [2] => 01 2C
        [3] => 01 5E
        [4] => 01 90
        [5] => 01 F4
        [6] => 02 58
        [7] => 02 BC
        [8] => 03 52
        [9] => 03 E8
        [10] => 04 BO
        [11] => 05 DC
        [12] => 07 6C
        [13] => 09 60
        [14] => 0B 54
        [15] => 0D 48
        [16] => 10 04
        [17] => 13 EC
        [18] => 19 00
        [19] => 1F A4
    )

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 897
    Points : 6 661
    Points
    6 661
    Par défaut
    Du point de vue performance: Si on benchmark, la version avec la boucle for est la plus rapide (2 fois plus rapide que les autres approches et l'écart se creuse si on augmente la taille du tableau). Après en condition réelle (une seule exécution avec une quarantaine de valeurs), la différence est invisible et ne peut pas se mesurer.

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

Discussions similaires

  1. fonction prédéfinie sur les tableaux
    Par yacin87 dans le forum Débuter
    Réponses: 1
    Dernier message: 01/03/2010, 19h18
  2. Réponses: 2
    Dernier message: 01/05/2004, 21h15
  3. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  4. [LG]Symbole # (dièse) et fonctions sur les chaînes
    Par James64 dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2004, 14h19

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