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 :

Erreur lors de la lecture d'un tableau associatif suite à conversion d'un XLS. [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut Erreur lors de la lecture d'un tableau associatif suite à conversion d'un XLS.
    Bonsoir à tous.

    Pour les besoins d'une association ou je suis bénévole, j'ai converti un fichier XLS en tableau associatif.
    Je me suis inspiré de plusieurs tutos trouvés ici et la. (J'ai mis le code de ma page à la fin de mon post.)

    Lorsque j'utilise la commande print_r($arrayExcel); ou var_dump($arrayExcel);, ma page affiche les données comme-ceci (Affichage avec var-dump).

    array(6) { [0]=> array(7) { ["INDEX"]=> string(2) "26" ["Date_début"]=> string(5) "43836" ["Date_fin"]=> string(5) "43846" ["Annulation"]=> string(0) "" ["Site"]=> string(4) "ALSH" ["NUM_ADHERENT"]=> string(5) "CZ003" ["ENFANT"]=> string(10) "HAMA Arkan" } [1]=> array(7) { ["INDEX"]=> string(2) "89" ["Date_début"]=> string(5) "43836" ["Date_fin"]=> string(5) "43840" ["Annulation"]=> string(0) "" ["Site"]=> string(3) "AAD" ["NUM_ADHERENT"]=> string(5) "FD029" ["ENFANT"]=> string(11) "DEBLER Rose" } [2]=> array(7) { ["INDEX"]=> string(3) "286" ["Date_début"]=> string(5) "43837" ["Date_fin"]=> string(5) "43840" ["Annulation"]=> string(0) "" ["Site"]=> string(4) "ALSH" ["NUM_ADHERENT"]=> string(5) "AY037" ["ENFANT"]=> string(13) "MARCO Mathieu" } [3]=> array(7) { ["INDEX"]=> string(2) "77" ["Date_début"]=> string(5) "43839" ["Date_fin"]=> string(5) "43839" ["Annulation"]=> string(0) "" ["Site"]=> string(4) "ALSH" ["NUM_ADHERENT"]=> string(5) "CX014" ["ENFANT"]=> string(10) "ZENTZ Eric" } [4]=> array(7) { ["INDEX"]=> string(2) "36" ["Date_début"]=> string(5) "43843" ["Date_fin"]=> string(5) "43847" ["Annulation"]=> string(0) "" ["Site"]=> string(3) "AAD" ["NUM_ADHERENT"]=> string(5) "BQ006" ["ENFANT"]=> string(13) "HERMAN Victor" } [5]=> array(7) { ["INDEX"]=> string(2) "68" ["Date_début"]=> string(5) "43844" ["Date_fin"]=> string(5) "43846" ["Annulation"]=> string(0) "" ["Site"]=> string(4) "ALSH" ["NUM_ADHERENT"]=> string(5) "BW045" ["ENFANT"]=> string(10) "PAUL Marie" } }
    Cela me fait penser que j'ai codé correctement ma conversion.

    Lorsque j'essaie d'afficher les informations ligne par ligne en utilisant une boucle foreach j'ai une erreur qui s'affiche :
    Notice: Array to string conversion in C:\xampp\htdocs\test\test2.php on line 56
    J'ai fait plusieurs recherches pour identifier le pourquoi de ce message mais n'ai pas trouvé quelque-chose qui correspondait à mon problème. De ce que je comprend, j'ai un problème de conversion de tableau en variable et je ne comprends pas comment résoudre ce problème.

    Pour info : J'utilise une VM pour développer ma page ou j'ai installé XAMPP à l'identique de la machine ou sera hébergé la page une fois terminée. Le site est destiné à un réseau local sans internet. J'ai une contrainte de conversion d'un fichier XLS. Je n'ai pas d'autre possibilité et ne souhaite pas faire de conversions en CSV ou un autre format.

    Voici ce que contient mon fichier XLS. (Je n'ai mis qu'une seule ligne et le nom des enfants a été tronqué pour des raisons de confidentialité)

    INDEX Date_début Date_fin Annulation Site NUM_ADHERENT ENFANT
    26 06/01/2020 16/01/2020 0 ALSH CZ003 HAMA Arkan

    Voici le code de ma page de test qui m'indique l'erreur en question.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
     
    require 'C:\Windows\System32\vendor\autoload.php';
     
    $inputFileType = 'Xls';
    $inputFileName = './presences_enfants.XLS';
     
    try
    	{
    	/**  Create a new Reader of the type defined in $inputFileType  **/
    	$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
    	/** Load $inputFileName to a Spreadsheet Object  **/
    	$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
    	}
     
    catch(Exception $e)
        {
        // si l'ouverture échoue, on l'indique à l'utilisateur.
        echo "fichier introuvable"; // METTRE A JOUR POUR ENVOYER UN MAIL AUX ADMINISTRATEURS !!!
        exit();
        }
     
    // Création d'un tableau qui contiendra les colonnes du fichier Excel
    $arrayExcel = [];
     
    // Séléction de la feuille du document à insérer
    $sheet = $spreadsheet->getSheet(0);
    // Nombre de lignes de la feuille concernée.
    $highestRow = $sheet->getHighestRow();
    // Nombre de colonnes de la feuille concernée.
    $highestColumn = $sheet->getHighestColumn();
     
     
    // Boucle pour parcourir les lignes de la feuille.
    for ($row = 1; $row <= $highestRow; $row++)
    {
    	// On range la ligne dans l'ordre 'normal' --> ??? Je ne sais pas à quoi cela correspond !!!
    	$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
        NULL,
        TRUE,
        FALSE);
        // rowData est un tableau contenant les données de la ligne
        $rowData = $rowData[0];
     
    	// Création d'un tableau associatif nommé $arrayExcel et ajout de chaque ligne de la feuille à la suite.
    	array_push($arrayExcel, ["INDEX"=>trim($rowData[0]), "Date_début"=>trim($rowData[1]), "Date_fin"=>trim($rowData[2]), "Annulation"=>trim($rowData[3]), "Site"=>trim($rowData[4]), "NUM_ADHERENT"=>trim($rowData[5]), "ENFANT"=>trim($rowData[6])]);
     
    	}
     
    array_shift($arrayExcel); // Suppression de la première ligne qui contient les entêtes de colonnes.
     
    //var_dump($arrayExcel); // POUR TEST - permet de vérifier que mon tableau contient les valeurs de ma feuille excel
     
    foreach($arrayExcel as $element)
    {
        echo $element . '<br />';
    }
     
    ?>

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    En faisant d'autres essais et plus précisément en ajoutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($arrayExcel);
    echo '</pre>';
    Voici ce que donne l'affichage :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Array
    (
        [0] => Array
            (
                [INDEX] => 26
                [Date_début] => 43836
                [Date_fin] => 43846
                [Annulation] => 
                [Site] => ALSH
                [NUM_ADHERENT] => CZ003
                [ENFANT] => HAMA Arkan
            )
     
        [1] => Array
            (
                [INDEX] => 89
                [Date_début] => 43836
                [Date_fin] => 43840
                [Annulation] => 
                [Site] => AAD
                [NUM_ADHERENT] => FD029
                [ENFANT] => DEBLER Rose
            )
     
        [2] => Array
            (
                [INDEX] => 286
                [Date_début] => 43837
                [Date_fin] => 43840
                [Annulation] => 
                [Site] => ALSH
                [NUM_ADHERENT] => AY037
                [ENFANT] => MARCO Mathieu
            )
     
        [3] => Array
            (
                [INDEX] => 77
                [Date_début] => 43839
                [Date_fin] => 43839
                [Annulation] => 
                [Site] => ALSH
                [NUM_ADHERENT] => CX014
                [ENFANT] => ZENTZ Eric
            )
     
        [4] => Array
            (
                [INDEX] => 36
                [Date_début] => 43843
                [Date_fin] => 43847
                [Annulation] => 
                [Site] => AAD
                [NUM_ADHERENT] => BQ006
                [ENFANT] => HERMAN Victor
            )
     
        [5] => Array
            (
                [INDEX] => 68
                [Date_début] => 43844
                [Date_fin] => 43846
                [Annulation] => 
                [Site] => ALSH
                [NUM_ADHERENT] => BW045
                [ENFANT] => PAUL Marie
            )
     
    )
    Je pense que mon problème vient probablement du fait qu'il s'agit d'un tableau dans un tableau. Je vais creuser mes recherches en ce sens.

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

    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
    <table>
    	<thead>
    		<tr>
                <th>INDEX</th>
                <th>Date_début</th>
                <th>Date_fin</th>
                <th>Annulation</th>
                <th>Site</th>
                <th>NUM_ADHERENT</th>
                <th>ENFANT</th>
    		<tr>
    	</thead>
    	<tbody>
    <?php foreach($arrayExcel as $ligne) { ?>
    		<tr>
                <td><?= $ligne['INDEX']; ?></td>
                <td><?= $ligne['Date_début']; ?></td>
                <td><?= $ligne['Date_fin']; ?></td>
                <td><?= $ligne['Annulation']; ?></td>
                <td><?= $ligne['Site']; ?></td>
                <td><?= $ligne['NUM_ADHERENT']; ?></td>
                <td><?= $ligne['ENFANT']; ?></td>
    		<tr>
    <?php } ?>
    	</tbody>
    </table>

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Merci de ta réponse.

    Super, ça fonctionne. J'arrive désormais à adapter les valeurs que je souhaite afficher.

    Le problème vient-il du fait, comme je le pensais, qu'il s'agit d'un tableau dans un tableau ?

    Si non, que signifie ce message exactement ?

    Merci d'avance pour ta réponse.

  5. #5
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 99
    Points : 229
    Points
    229
    Par défaut
    Oui.

    Il signifie que vous faites une opération de chaîne sur une variable de type array. PHP est faiblement typé et converti les variables scalaires quand il le peut. Dans d'anciennes versions de PHP, faire un echo sur un array écrivait juste "Array". Depuis quelques versions, une notice est renvoyée pour avertir le développeur qu'il s'agit certainement d'une erreur.

    echo []; donnerait la même notice.

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 229
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Trehinos Voir le message
    [...]Dans d'anciennes versions de PHP, faire un echo sur un array écrivait juste "Array". Depuis quelques versions, une notice est renvoyée pour avertir le développeur qu'il s'agit certainement d'une erreur.[...]
    C'est encore le cas dans la version 7. J'avais la Notice ainsi que la mention Array sur une seconde ligne.

    En tout cas, merci à tous de vos réponses. Je vais pouvoir continuer à avancer.

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

Discussions similaires

  1. [SAX] Erreur lors de la lecture
    Par pierreonxbox dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 15/08/2008, 11h32
  2. [XSLT] Erreur lors de la lecture d'un fichier XSL
    Par Mobius dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 14/05/2008, 14h25
  3. Erreur lors de la lecture d'un fichier
    Par akremb22 dans le forum Delphi
    Réponses: 14
    Dernier message: 11/04/2007, 15h15
  4. Erreur lors de la déclaration d'un tableau
    Par petdelascar dans le forum C
    Réponses: 9
    Dernier message: 12/05/2006, 19h41
  5. Erreur lors de la lecture d'un blob
    Par guille007 dans le forum DB2
    Réponses: 3
    Dernier message: 07/03/2006, 16h37

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