Comment ajouter des infos à un index qui n'existe pas forcément ?

Comment ajouter des infos à un index qui n'existe pas forcément ? - PHP - Programmation

Marsh Posté le 04-05-2010 à 22:11:31    

Bonjour,

 

Lorsque je fais:

 
Code :
  1. $montableau['nouvel_index'].= 'blablabla';


(remarquez le point avant le signe égal)

 

J'obtiens l'erreur suivante:

Citation :

Notice: Undefined index: nouvel_index

 

Or si je fais:

Code :
  1. $montableau['nouvel_index'] = '';
  2. $montableau['nouvel_index'].= 'blablabla';
 

Y'a plus d'erreur.

 

Donc à part vérifier que l'index existe déjà ou pas, y'a-t-il une solution simple ?

 

Merci par avance  :jap:

 


PS: Notez que je travaille volontairement avec error_reporting(-1);


Message édité par GPT2 le 05-05-2010 à 18:45:10
Reply

Marsh Posté le 04-05-2010 à 22:11:31   

Reply

Marsh Posté le 05-05-2010 à 11:04:47    

Il n'y a pas d'autre solution à ma connaissance...
 
As-tu initialisé $montableau = array(); ?

Reply

Marsh Posté le 05-05-2010 à 11:49:18    

Pas de miracle, php ne va pas deviner qui tu comptais mettre un entier à cet indice et initialiser à 0 s'il n'y a rien...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-05-2010 à 13:30:08    

Oups, effectivement, j'avais pas vu le point.
 
Le .= est une concaténation avec 2 chaines.
La 2ème chaine est définie, mais pas la 1ère, qui n'est pas définie.
D'où l'erreur...
 

Code :
  1. $montableau['nouvel_index'] = 'blablabla';


 
Pourquoi veux-tu absolument concaténer ?

Message cité 1 fois
Message édité par Pascal le nain le 05-05-2010 à 13:31:06
Reply

Marsh Posté le 05-05-2010 à 17:08:58    

merci pour les réponses
 

Pascal le nain a écrit :

Pourquoi veux-tu absolument concaténer ?


 
parce que j'ai une boucle qui, à chaque itération, ajoute des données à mon tableau:
 

Code :
  1. $produits = array();
  2.         foreach ($produits_en_desordre as $key => $value)
  3.         {
  4.             $produits[$value['type_de_produit']].= $value['nom_du_produit'] . ' : ' . $value['prix_du_produit'] . '<br />';
  5.         }


 
le but étant de créer un index par type de produit, de sorte que $produits['fruit'] me donne la liste de tous les produits correspondant à ce "type_de_produit". capito?
 
voici une solution pour enlever l'erreur :
 

Code :
  1. $produits = array();
  2.         foreach ($produits_en_desordre as $key => $value)
  3.         {
  4.             if (!isset($produits[$value['type_de_produit']])) {
  5.                 $produits[$value['type_de_produit']] = '';
  6.             }
  7.             $produits[$value['type_de_produit']].= $value['nom_du_produit'] . ' : ' . $value['prix_du_produit'] . '<br />';
  8.         }


 
mais bon le problème de performance de cette méthode m'inquiète sévèrement  [:tibo2002] , que faire ?


Message édité par GPT2 le 05-05-2010 à 18:44:37
Reply

Marsh Posté le 05-05-2010 à 17:42:27    

Faire des tableaux de tableaux?:D
 

Code :
  1. $produits = array();
  2. foreach ($produits_en_desordre as $key => $value)
  3. {
  4.     $produits[$value['type_de_produit']][] = $value['nom_du_produit'] . ' : ' . $value['prix_du_produit'] . '<br />';
  5. }


 
...après ça dépend comment tu t'en sers derrière...mais en tout cas t'inquiètes surtout pas des performances pour l'instant...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 05-05-2010 à 17:58:00    

skeye a écrit :

Faire des tableaux de tableaux?:D


 
Pas con. Après tu fais un implode pour tout rassembler dans une variable.
En plus ca t'évite d'ajouter <br/> à chaque fois.
 

Code :
  1. $produits = array();
  2. foreach ($produits_en_desordre as $key => $value)
  3. {
  4.      $produits[$value['type_de_produit']][] = $value['nom_du_produit'] . ' : ' . $value['prix_du_produit'];
  5. }
  6. $produits[$value['type_de_produit']] = implode('<br/>', $produits[$value['type_de_produit']]);


 
:p


Message édité par Pascal le nain le 05-05-2010 à 18:00:42
Reply

Marsh Posté le 05-05-2010 à 18:58:19    

merci pour les réponses
 
je vais réfléchir...  
 

skeye a écrit :

mais en tout cas t'inquiètes surtout pas des performances pour l'instant...


 [:nicarao]  
 
mauvaise approche [:o_non]
 
 
 
 
en fait je travaille avec ApacheBench qui tourne en parallèle  :D  et je deviens un peu trop parano car à chaque ligne modifiée: je refais un bench complet  :whistle:

Reply

Marsh Posté le 05-05-2010 à 19:57:15    

GPT2 a écrit :


 [:nicarao]  
 
mauvaise approche [:o_non]
 
 
en fait je travaille avec ApacheBench qui tourne en parallèle  :D  et je deviens un peu trop parano car à chaque ligne modifiée: je refais un bench complet  :whistle:


complète perte de temps. :/


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 06-05-2010 à 17:14:20    

:kaola:

Reply

Marsh Posté le 06-05-2010 à 17:14:20   

Reply

Marsh Posté le 06-05-2010 à 17:33:40    

Ton test là il coûte vraiment pas cher... sinon tu fais une première étape où tu n'extrais que les types de produits, ce qui te permettra d'initialiser les indices de ton tableau.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed