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 :

"Fatal error: Unsupported operand types" => Addition d'array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Par défaut "Fatal error: Unsupported operand types" => Addition d'array
    Bonjour à tous,

    Alors je commence à être a cours d'idée (ou je ne vais pas dans la bonne direction ) mais le fait est que j'ai créé plusieurs tableau dont les valeurs sont écrites par un foreach puis un if qui sélectionne les différents tableaux dans lesquels la valeur doit être écrite, ensuite je concatène les tableaux avec un opérande "+" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $products_orders= $products_orders_1 + $products_orders_2 + $products_orders_3 + $products_orders_4 + $products_orders_other;
    . Tout se passe bien si chacun de mes tableaux contient des valeurs, mais il arrive parfois qu'un de mes tableaux ne contienne aucune ligne... et la j'ai une erreur.

    Je voudrais donc ajouter un test (méthode propre) du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $products_orders= if(!empty($products_orders_1)){products_orders_1+}if(!empty($products_orders_2)){products_orders_2+}if(!empty($products_orders_N)){products_orders_N +};
    ou si ce n'est pas possible, une ligne bidon si le tableau est vide...

    Je ne suis pas développeur à la base mais admin réseau donc désolé si j'essaie de faire un truc improbable, voici le Zend_Debug::dump de mes tableaux ($products_orders_1,$products_orders_2,$products_orders_3,$products_orders_4,$products_orders_other; seul $products_orders_other est non-vide dans mon exemple) :

    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
     
    array(0) {
    }
    array(0) {
    }
    array(0) {
    }
    array(0) {
    }
    array(43) {
      [4418] => string(25) "Produit1"
      [4213] => string(43) "Produit2"
      [4207] => string(50) "Produit3"
      [...] => string(3) "..."
      [N] => string(11) "ProduitN"
    }
    Et l'erreur en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Fatal error: Unsupported operand types"
    Si vous avez besoin du code pour mieux comprendre n'hésitez pas à me le demander, merci d'avance pour vos réponses

  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
    Par défaut
    Cette erreur se produit si un de tes éléments n'est pas un tableau.
    Un tableau vide ne provoque pas d'erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Par défaut
    Merci, c'est ce que je vois depuis tout à l'heure sur les forums, mais je ne trouve pas ou je me serais trompé dans la déclaration ou dans les valeurs inscrites

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    public function getPdf($orders = array())
        {
            $this->_beforeGetPdf();
            try{
            	$this->_initRenderer('dispatch');
    		}catch(Exception $e){
    			Mage::Log($e->getMessage());
    		}
            $pdf = new Zend_Pdf();
            $style = new Zend_Pdf_Style();
            $this->_setFontBold($style, 10);
    		$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
    		 /* Create resume */
     
                /* Add new table head */
                        $page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);
                        $pdf->pages[] = $page;
                        $this->y = 800;
     
                        $page->setFont(Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER), 7);
                        $page->setFillColor(new Zend_Pdf_Color_GrayScale(0.5));
                        $page->setLineColor(new Zend_Pdf_Color_GrayScale(0.5));
                        $page->setLineWidth(0.5);
                        $page->drawRectangle(25, $this->y, 570, $this->y-15);
                        $this->y -=10;
     
                        $page->setFillColor(new Zend_Pdf_Color_GrayScale(1));
    		            $page->drawText(Mage::helper('sales')->__('Num. commande'), 35, $this->y, 'UTF-8');
    		            $page->drawText(Mage::helper('sales')->__('Quantite'), 100, $this->y, 'UTF-8');
    		            $page->drawText(Mage::helper('sales')->__('Article'), 140, $this->y, 'UTF-8');
    		            $page->drawText(Mage::helper('sales')->__('SKU'), 400, $this->y, 'UTF-8');
     
                        $page->setFillColor(new Zend_Pdf_Color_GrayScale(0));
                        $this->y -=20;
     
                $products_orders = array();
                $products_name_1 = $products_name_2 = $products_name_3 = $products_name_4 = $products_name_other = Array();
                $products_orders_1 = $products_orders_2 = $products_orders_3 = $products_orders_4 = $products_orders_other = Array();
                $products_orders_qty_1 = $products_orders_qty_2 = $products_orders_qty_3 = $products_orders_qty_4 = $products_orders_other = Array();
     
     
     
                /*Generation des tableaux de correspondance
                Produits des commandes $products_orders = array();
                qty : $products_orders_qty = array();
                Tri : products_orders_type = array();
                */
                foreach ($orders as $orderId){
    				$order = Mage::getModel('sales/order')->load($orderId);
    				$orderNumber = $orderId;
                    $OrderIdTmp = $order->getIncrementId();
     
    				foreach ($order->getAllItems() as $item){
    					if ($item->getProductType() != Mage_Catalog_Model_Product_Type::TYPE_BUNDLE ){
                                    $productId = $item->getProductId();
                                    $aryproduct = Mage::getModel('catalog/product')->load($productId);
    				                $OrderIdTmp = $order->getIncrementId();
    				                if(isset($products_orders[$productId]) ){
    				                	$OrderIdTmp = $products_orders[$productId].';'.$order->getIncrementId();
    				                }
     
                                    #recupérer des tableaux de produits par gamme de produits
                                    $option = Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'gamme_produit', "0");
                                    if ($option == "984")
                                    {
                                        $products_orders_1[$productId] = $OrderIdTmp;
                                        $products_name_1[$productId] = $aryproduct->getName();
                                        $products_orders_qty_1[$productId.'_'.$order->getIncrementId()] = $item->getQtyOrdered();
                                        $products_orders_qty_1[$productId.'_'.$order->getIncrementId()] = substr($products_orders_qty_1[$productId.'_'.$order->getIncrementId()], 0, strpos($products_orders_qty_1[$productId.'_'.$order->getIncrementId()], "."));
                                    }
                                    else if ($option == "985")
                                    {
                                        $products_orders_2[$productId] = $OrderIdTmp;
                                        $products_name_2[$productId] = $aryproduct->getName();
                                        $products_orders_qty_2[$productId.'_'.$order->getIncrementId()] = $item->getQtyOrdered();
                                        $products_orders_qty_2[$productId.'_'.$order->getIncrementId()] = substr($products_orders_qty_2[$productId.'_'.$order->getIncrementId()], 0, strpos($products_orders_qty_2[$productId.'_'.$order->getIncrementId()], "."));
                                    }
                                    else if ($option == "983")
                                    {
                                        $products_orders_3[$productId] = $OrderIdTmp;
                                        $products_name_3[$productId] = $aryproduct->getName();
                                        $products_orders_qty_3[$productId.'_'.$order->getIncrementId()] = $item->getQtyOrdered();
                                        $products_orders_qty_3[$productId.'_'.$order->getIncrementId()] = substr($products_orders_qty_3[$productId.'_'.$order->getIncrementId()], 0, strpos($products_orders_qty_3[$productId.'_'.$order->getIncrementId()], "."));
                                    }
                                    else if ($option == "982")
                                    {
                                        $products_orders_4[$productId] = $OrderIdTmp;
                                        $products_name_4[$productId] = $aryproduct->getName();
                                        $products_orders_qty_4[$productId.'_'.$order->getIncrementId()] = $item->getQtyOrdered();
                                        $products_orders_qty_4[$productId.'_'.$order->getIncrementId()] = substr($products_orders_qty_4[$productId.'_'.$order->getIncrementId()], 0, strpos($products_orders_qty_4[$productId.'_'.$order->getIncrementId()], "."));
                                    }
                                    else {
                                        $products_orders_other[$productId] = $OrderIdTmp;
                                        $products_name_other[$productId] = $aryproduct->getName();
                                        $products_orders_qty_other[$productId.'_'.$order->getIncrementId()] = $item->getQtyOrdered();
                                        $products_orders_qty_other[$productId.'_'.$order->getIncrementId()] = substr($products_orders_qty_other[$productId.'_'.$order->getIncrementId()], 0, strpos($products_orders_qty_other[$productId.'_'.$order->getIncrementId()], "."));
                            }
    			        }
    	            }
     
                }
     
     
                // Tri par ordre alphabetique selon les valeurs pour tous les tableaux
                asort($products_name_1);
                asort($products_name_2);
                asort($products_name_3);
                asort($products_name_4);
                asort($products_name_other);
     
                // Combinaison des deux tableaux en gardant le tri alphabetique
     
                $products_orders_1 = array_replace_recursive ($products_name_1, $products_orders_1);
                $products_orders_2 = array_replace_recursive ($products_name_2, $products_orders_2);
                $products_orders_3 = array_replace_recursive ($products_name_3, $products_orders_3);
                $products_orders_4 = array_replace_recursive ($products_name_4, $products_orders_4);
                $products_orders_other = array_replace_recursive ($products_name_other, $products_orders_other);
     
     
                ################################
                #
                #   Regroupement des tableaux en deux tableaux
                #
                #
     
                /*Zend_Debug::dump($products_orders_1);
                Zend_Debug::dump($products_orders_2);
                Zend_Debug::dump($products_orders_3);
                Zend_Debug::dump($products_orders_4);*/
     
                $products_orders = $products_orders_1 + $products_orders_2  + $products_orders_3 + $products_orders_4 + $products_orders_other;
                $products_orders_qty = $products_orders_qty_1 + $products_orders_qty_2 + $products_orders_qty_3 + $products_orders_qty_4 + $products_orders_qty_other;
    A priori, ça viendrait de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $products_orders_qty = $products_orders_qty_1 + $products_orders_qty_2 + $products_orders_qty_3 + $products_orders_qty_4 + $products_orders_qty_other;

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Par défaut
    Aie le copier/coller nous tuera !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $products_orders_qty_1 = $products_orders_qty_2 = $products_orders_qty_3 = $products_orders_qty_4 = $products_orders_other = Array();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $products_orders_qty_1 = $products_orders_qty_2 = $products_orders_qty_3 = $products_orders_qty_4 = $products_orders_qty_other = Array();
    Merci de ton aide, tu m'as mis sur la bonne piste

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    ensuite je concatène les tableaux avec un opérande "+"
    + n'est pas un opérateur de concaténation en PHP...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    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
    Par défaut
    C'est un opérateur d "union" sur les tableaux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. [PHP 5.2] Fatal error: Unsupported operand types
    Par ju0123456789 dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2010, 18h07
  2. Réponses: 2
    Dernier message: 25/03/2009, 21h40
  3. [MySQL] Fatal error: Unsupported operand types in..
    Par Sekigawa dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/03/2008, 10h58
  4. [PEAR][DB] Unsupported operand types in Renderer.php
    Par brissou dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 10/05/2007, 13h50

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