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 :

[Tableaux] Illegal offset type


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut [Tableaux] Illegal offset type
    Salut,

    Si le tableau correpondant à une clé de tableau ne contient qu'une clé, je souhaite en faire directement une valeur et non un tableau.
    Genre:

    $returns['tableau'][0] = array(0 => '1 valeur');
    doit donner:
    $returns['tableau'] = '1 valeur';

    Voila bon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($returns as $sub) { 
       if (!isset($sub[1]))
          $returns[$sub] = $returns[$sub][0];
    }
    Pourtant il m'affiche l'erreur:

    Warning: Illegal offset type in c:\program files\easyphp1-8\www\design\contrib\connection.lib.php on line 48
    Comment faire?
    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Un peu bizarroïde ton tableau, mais si tu y tiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($returns as $cle => $sub) 
    {
      if (!isset($sub[$cle][1]))
          $returns[$cle] = $returns[$cle][0][0];
    }

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Attention, les tableaux associatifs n'ont pas forcément d'index 0 ou 1 !

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Je me suis contenté de reprendre ceci :
    $returns['tableau'][0] = array(0 => '1 valeur');
    doit donner:
    $returns['tableau'] = '1 valeur';

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par jeca
    Je me suis contenté de reprendre ceci :
    Je sais, je ne m'adressais pas particulièrement à toi
    Par contre, dans ta solution, ce que je ne comprends pas, c'est la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($sub[$cle][1]))
    Alors que suivant le foreach, $cle est une clef de $returns mais pas de $sub

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    En fait mon tableau est forcément créé de façon a ce que ces clés commencent à 0 et finissent à x.
    Je m'etais trompé, dans mon exemple ce que je veux doit être:

    si returns vaut array('tableau' => array( 0 => a))
    alors le faire devenir:
    array('tableau' => a)

    mais si returns vaut array('tableau' => array( 0 => a, 1 => b)) on ne change rien (plusieurs clés).

    Donc si $returns[$sub][1] n'est pas défini, il n'y a qu'une clé donc je change.
    D'ou mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($returns as $sub) { 
       if (!isset($sub[1])) //$sub = tableau
          $returns[$sub] = $returns[$sub][0]; 
    }
    Et mon problème est toujours le warning.
    J'ai été plus clair?

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    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
     
    ~{7} php
    <?php
     
    $returns = array('tableau' => array('a'));
     
    var_dump($returns);
     
    if (count($returns['tableau']) <= 1) {
       $returns['tableau'] = array_pop($returns['tableau']);
    }
     
    var_dump($returns);
    ?>
    Content-type: text/html
    X-Powered-By: PHP/4.3.11
     
    array(1) {
      ["tableau"]=>
      array(1) {
        [0]=>
        string(1) "a"
      }
    }
    array(1) {
      ["tableau"]=>
      string(1) "a"
    }
    ~{8}

  8. #8
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci à toi alors voila ce que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($returns as $sub) { 
       if (count($returns[$sub]) <= 1)
          $returns[$sub] = array_pop($returns[$sub]); 
    }
    Cette fois il me dit que $returns[$sub] doit être un tableau, en plus des warning...

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    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
    36
    37
    38
    39
    40
    ~{10} php
    <?php
     
    $returns = array(
       't1' => array('a', 'b');
     
    ~{11} php
    <?php
     
    $returns = array(
       't1' => array(),
       't2' => array('a', 'b'),
       't3' => array('c')
    );
     
    foreach($returns as $key => $value) {
       if (count($returns[$key]) <= 1) {
          $returns[$key] = array_pop($returns[$key]);
       }
    }
     
    var_dump($returns);
    ?>
    Content-type: text/html
    X-Powered-By: PHP/4.3.11
     
    array(3) {
      ["t1"]=>
      NULL
      ["t2"]=>
      array(2) {
        [0]=>
        string(1) "a"
        [1]=>
        string(1) "b"
      }
      ["t3"]=>
      string(1) "c"
    }
    ~{12}
    EDIT: tu peux faire un count($value) au lieu de count($returns[$key])...

  10. #10
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Ah mince j'aurai pu trouver

    Merci beaucoup

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

Discussions similaires

  1. [Tableaux] problème récupération type de fichier
    Par Methode dans le forum Langage
    Réponses: 2
    Dernier message: 13/02/2007, 22h11
  2. [Tableaux] Variable de type tableau
    Par tiyolx dans le forum Langage
    Réponses: 12
    Dernier message: 13/10/2006, 10h14
  3. [Tableaux] Argument de type array dans __construct ??
    Par shadeoner dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2006, 20h03
  4. [Tableaux] Variable de type array dans un formulaire
    Par ThAOTh dans le forum Langage
    Réponses: 3
    Dernier message: 14/03/2006, 17h49
  5. Aide sur Warning: Illegal offset type in ...
    Par pounie dans le forum Langage
    Réponses: 5
    Dernier message: 03/01/2006, 13h13

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