Forum Programmation.php Récupérer en une seule ligne un élément d'un tableau retourné par une fonction

Posté par  .
Étiquettes : aucune
1
24
juil.
2009
Bonjour,

une fonction me retourne un tableau :

function getArray()
{
return array('a', 'b', 'c');
}

$array = getArray();


Je voudrais, en une ligne, invoquer la fonction getArray(), récupérer un seul élément de ce tableau, et le stocker dans une variable.

Par exemple :

$a = ************* ;


Que mettre à la place des étoiles, pour que $a contienne la valeur 'a' ?
En utilisant la fonction getArray() bien entendu.

Merci d'avance !
  • # Instinctivement

    Posté par  . Évalué à 2.

    Je dirais
    $a = getArray()[2];
    mais ca ne marche pas, donc tu crée une fonction getElem qui prend un tableau et renvoie un element :

    function getElem($array){
    return $array[2];
    }

    $a = getElem(getArray());
    • [^] # Re: Instinctivement

      Posté par  . Évalué à 2.

      C'est justement ce que j'aimerais éviter de faire.

      J'ose espérer que langage prévoit quelque chose pour faire ce genre d'opération... (plutôt dans le style de $a = getArray()[2] ).

      Il me semble avoir déjà vu ça, à l'aide d'accolades, mais je ne le retrouve pas.
  • # Ternaire

    Posté par  (site web personnel) . Évalué à 2.

    $a=($temp=getArray()) ? $a=$temp[2] : $a=false;
    • [^] # Re: Ternaire

      Posté par  (site web personnel) . Évalué à 2.


      function getArray() {
      return array('a', 'b', 'c');
      }

      $a = ($temp=getArray()) ? $a=$temp[2] : $a=false;
      echo $a.'\n';



      Ca renvoi bien la lettre "c"
  • # C'est justement ce genre de truc qui me gave dans PHP ...

    Posté par  . Évalué à 3.

    ... et qui font que je le considère comme un sous-langage.

    J'ai du mal à comprendre comment ça fai pour survivre une horreur pareille ....
    • [^] # Re: C'est justement ce genre de truc qui me gave dans PHP ...

      Posté par  . Évalué à 2.

      Allez, une preuve ...

      En ruby ça donne :

      def getarray
      ["a","b","c"]
      end

      puts getarray[1]

      Le résultat :
      >ruby test2.rb
      b
      • [^] # trollons-nous dans les bois...

        Posté par  . Évalué à 3.

        Ruby aussi est un sous-langage, "getarray" est bien une fonction, et mentionner son nom fait un appel (potentiellement coûteux) sans prévenir, ce qui est détestable. Vive les "()" explicites !
        (et hail to python chez qui mentionner "getarray" est comme on pourrait s'y attendre bien un pointeur vers la fonction)
        • [^] # Re: trollons-nous dans les bois...

          Posté par  . Évalué à 1.

          Ruby aussi est un sous-langage, "getarray" est bien une fonction, et mentionner son nom fait un appel (potentiellement coûteux) sans prévenir, ce qui est détestable. Vive les "()" explicites !

          Pourquoi les () explicites ? Ca sert à quoi ?

          J'ai écrit un exemple, dans la vie de tous les jours, je ne ferai pas appel à une foncion juste pour atteindre un élément du tableau .... La c'est pour l'exemple. On peut supposer que le tableau est rempli par d'autres traitements ...

          Ecris un exemple si tu veux troller.
          • [^] # Re: trollons-nous dans les bois...

            Posté par  . Évalué à 2.

            Ben entre un accès à une variable et un appel de fonction, il y a une différence énorme, qui ne se voit pas dans la syntaxe ruby.
            Je ne sais même pas comment on fait référence à une fonction en ruby mais il doit certainement falloir une syntaxe spéciale, alors qu'en python, si tu parles de la fonction "x", ben t'écris "x", et si tu parles du résultat de "x", ben t'appelles "x", donc comme ça : "x()"
            • [^] # Re: trollons-nous dans les bois...

              Posté par  . Évalué à 1.

              Je ne sais même pas comment on fait référence à une fonction en ruby mais il doit certainement falloir une syntaxe spéciale, alors qu'en python, si tu parles de la fonction "x", ben t'écris "x", et si tu parles du résultat de "x", ben t'appelles "x", donc comme ça : "x()"

              def getarray
              ["a","b","c"]
              end

              x=method(:getarray)

              puts x.call[1]

              C'est un peu déroutant quand on n'est pas habitué mais ça peut se révéler très pratique dans certains cas ....

              A mon avis l'une ou l'autre des approches n'est pas plus problématique que l'autre. Il y a seulement des cas ou l'une se révelera plus pratique et l'autre moins ... et vice versa ..

              .. Au pasage merci pour ce troll, j'ai du chercher un peu pour répondre à ta question ...
        • [^] # Re: trollons-nous dans les bois...

          Posté par  . Évalué à 2.

          Tout est une question de disipline :

          irb(main):002:0> def my_array
          irb(main):003:1> return ["A","B","C","D"]
          irb(main):004:1> end
          => nil
          irb(main):005:0> my_array[1]
          => "B"
          irb(main):006:0> my_array()[1]
          => "B"
          irb(main):007:0>

          Certains détestent la liberté syntaxique de Perl ou de Ruby, moi ça ne me gêne pas trop, suffit d'être constant dans sa façon d'écrire le code.

          Et oui je fais toujours suivre mes appels de fonctions d'un ().
          • [^] # Re: trollons-nous dans les bois...

            Posté par  . Évalué à 2.

            "Suffit", sauf que le fait même que ce soit facultatif est problématique.
            • [^] # Re: trollons-nous dans les bois...

              Posté par  . Évalué à 3.

              Non, c'est ce qui fait que certains langages me rebutent, ou pas.

              Je code de façon consistante en C et Perl, je suis en train d'apprendre Ruby (après un bref essai pour Python). Ce que j'aime en Perl & Ruby, c'est la possibilité d'utiliser l'implicite quand ça permet de simplifier la lecture. Mais ça n'empêche pas de devoir se discipliner. En C il est tout à fait possible d'écrire des horreurs aussi, et pourtant tout appel de fonction doit bien être suivi de parenthèses ...
            • [^] # Re: trollons-nous dans les bois...

              Posté par  . Évalué à 1.

              Non ce n'est pas problématique, c'est une particularité du langage qui peut être utilisée de façon très pratique ....

              Je ne me lancerai pas dans des explications longues sur ce sujet car d'une part je ne maitrise pas suffisamment Ruby pour m'avancer sans dire de conneries, et d'autre part je pense que ça resera inaccessible à un esprit formaté par l'étroitesse du Python ... :).
  • # array_shift

    Posté par  . Évalué à 2.

    http://www.php.net/manual/fr/function.array-shift.php
    array_shift() extrait la première valeur d'un tableau et la retourne, en raccourcissant le tableau d'un élément, et en déplaçant tous les éléments vers le bas. Toutes les clés numériques seront modifiées pour commencer à zéro.

    $a = array_shift(GetArray());
    • [^] # Re: array_shift

      Posté par  . Évalué à 2.

      Merci, ça correspond à ce que je cherche.
  • # Trivial

    Posté par  . Évalué à 4.

    La solution est pourtant triviale:
    $a = array_search(0, array_flip(getArray()));

    --> []

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.