Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/04/2011, 10h08   #1
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Par défaut Comprendre l'addition de tableaux

Bonjour à tous.

J'aimerais comprendre une fois pour toutes le rôle de l'opérateur d'addition lors qu'il est utilisé avec des tableaux. J'avoue que c'est quelque chose que je fais peu et que je ne maitrise pas vraiment.

Ce que je ne suis pas sûr de comprendre, c'est le comportement obtenu lors qu'on utilise des tableaux associatifs, le fonctionnement n'est pas du tout similaire à array_merge que j'ai l'habitude d'utiliser.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$a = array(1,2,3);
$b = array(4,5,6);
var_dump($a + $b);
 
$a = array('a' => 1);
$b = array('b' => 2);
var_dump($a + $b);
 
$a = array('a' => 1, 'b' => 2);
$b = array('b' => 3, 'c' => 4);
var_dump($a + $b);
Voilà, si je peux profiter de votre sagesse et de vos retours d'expérience, vos messages sont les bienvenus.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h20   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
il ajoute les clés qui n'existent pas

dans le 1er exemple, les clés 0, 1, 2 existent déjà
dans le 2eme c'est ok
dans le 3eme b existe déjà
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h37   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Mais à l'inverse de array_merge, il ne modifie pas les valeurs des clés exitantes.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h46   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Benjamin Delespierre Voir le message
Mais à l'inverse de array_merge, il ne modifie pas les valeurs des clés exitantes.
oui, et ça n'ajoute pas de clé si elle n'existe pas contrairement à array_merge

Code :
1
2
3
4
5
$a = array(1,2,3);
$b = array(4,5,6);
$c = $a + $b;
$d = array_merge($a, $b);
var_dump($c, $d);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 10h57   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
du coup je ne vois pas réellement l’intérêt si ce n'est avec des clés non numériques non?
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h14   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par boo64 Voir le message
du coup je ne vois pas réellement l’intérêt si ce n'est avec des clés non numériques non?
ça ajoute juste 2 tableaux sans écraser les clés, je m'en sert toujours quand je veux collé des tableaux
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h25   #7
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Citation:
Envoyé par stealth35 Voir le message
ça ajoute juste 2 tableaux sans écraser les clés, je m'en sert toujours quand je veux collé des tableaux
ok dsl si m'a question était bete je ne peux pas tester ton bout de code au boulot.
du coup si j'ai bien saisi
Code :
1
2
3
$a = array(1,2,3);
$b = array(4,5,6);
$c = $a + $b;
affichera [0] =>1 [1] =>2 [2] => 3

et

Code :
1
2
3
$a = array(1,2,3);
$b = array(4,5,6);
$c = $b + $a;
affichera [0] =>4 [1] =>5 [2] => 6
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h25   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
L'intérêt principal est de pouvoir faire ça:
Code :
1
2
3
4
5
6
7
8
9
 
public static function setConfig ($config = array()) {
  $defaults = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
  );
  static::$_config = $config + $defaults;
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h29   #9
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Citation:
Envoyé par Benjamin Delespierre Voir le message
L'intérêt principal est de pouvoir faire ça:
Code :
1
2
3
4
5
6
7
8
9
 
public static function setConfig ($config = array()) {
  $defaults = array(
    'a' => 1,
    'b' => 2,
    'c' => 3,
  );
  static::$_config = $config + $defaults;
}
effectivement !! bon tout est dit il me semble merci pr l'info
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h31   #10
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Citation:
Envoyé par Benjamin Delespierre Voir le message
L'intérêt principal est de pouvoir faire ça:
Dans ton cas, tu peux utiliser un array_merge(), vu que tu as des clefs non numériques :

Code :
static::$_config = array_merge( $defaults, $config );
Personnellement je viens d'avoir l'utilité de l'addition de tableau, pour exactement le même type de script, mais avec des clefs numériques.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
private $_tOpt = array(
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_SSL_VERIFYPEER => 0,
  CURLOPT_SSL_VERIFYHOST => 0,
  CURLOPT_CONNECTTIMEOUT => 300,
  CURLOPT_TIMEOUT        => 300,
);
 
public function setOpt( $opt )
{
  $this->_tOpt = $opt + $this->_tOpt;
}
Dans mon cas, les valeurs des constantes sont numériques, donc si je peux pouvoir en écraser certaines, je suis obligé de passer par l'addition, sans quoi mes clefs sont renumérotées par array_merge().
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h41   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par Bisûnûrs Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
12
private $_tOpt = array(
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_SSL_VERIFYPEER => 0,
  CURLOPT_SSL_VERIFYHOST => 0,
  CURLOPT_CONNECTTIMEOUT => 300,
  CURLOPT_TIMEOUT        => 300,
);
 
public function setOpt( $opt )
{
  $this->_tOpt = $opt + $this->_tOpt;
}
Dans mon cas, les valeurs des constantes sont numériques, donc si je peux pouvoir en écraser certaines, je suis obligé de passer par l'addition, sans quoi mes clefs sont renumérotées par array_merge().
non ca n’écrasera pas la, de plus les clé sont déjà numérique dans ton cas il faut bien faire un array_merge

faut bien comprend que c'est "que" de l'addition
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h48   #12
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Pourtant :

Code :
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
$_tOpt = array(
   CURLOPT_RETURNTRANSFER => 1,
   CURLOPT_SSL_VERIFYPEER => 0,
   CURLOPT_SSL_VERIFYHOST => 0,
   CURLOPT_CONNECTTIMEOUT => 300,
   CURLOPT_TIMEOUT        => 300,
);
 
$tSupp = array(
   CURLOPT_CONNECTTIMEOUT => 60,
   CURLOPT_TIMEOUT => 60,
);
 
var_dump( array_merge( $_tOpt, $tSupp ) );
var_dump( $tSupp + $_tOpt );
 
/*
array
  0 => int 1
  1 => int 0
  2 => int 0
  3 => int 300
  4 => int 300
  5 => int 60
  6 => int 60
 
array
  78 => int 60
  13 => int 60
  19913 => int 1
  64 => int 0
  81 => int 0
*/
C'est bien le deuxième résultat qui m'intéresse.

Attention à l'ordre des variables dans l'addition, l'inverse n'aurait aucun effet.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 11h52   #13
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
J'ai eu moi aussi des problèmes avec la renumérotation des tableaux en utilisant les fonctions de manipulation, c'est dommage que la doc ne soit pas assez claire à ce sujet...

Un autre exemple d'utilisation de l'array merge pour ceux que ça intéresse;
Code :
1
2
3
4
5
6
7
8
9
10
 
$inputs = array(
  'name' => null,
  'surname' => null,
  'age' => 0,
  'profile' => "default"
);
 
$inputs = array_merge($inputs, array_intersect_key(array_filter($_REQUEST), $inputs));
if ($missing = in_array($inputs, null, true)) echo "Missing parameters: " . implode(',' $missing);
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 14h01   #14
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par boo64 Voir le message
je ne peux pas tester ton bout de code au boulot
Pour ça, parfois, j'utilise codepad


exemple http://codepad.org/DFuRA8sa
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 14h06   #15
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Citation:
Envoyé par Shikiryu Voir le message
Pour ça, parfois, j'utilise codepad


exemple http://codepad.org/DFuRA8sa
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 14h12   #16
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Attention, néanmoins, il est limité (oubliez curl, les regex, les lectures/écritures de fichiers, etc.)
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 14h14   #17
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Citation:
Envoyé par Shikiryu Voir le message
Intéressant comme site, dommage que l'exemple ne soit pas pertinent, l'extension cURL ne doit pas être installée sur le serveur et donc les constantes sont interprétées textuellement, et non pas avec les valeurs numériques qu'elles représentent.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 14h17   #18
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Dans ces cas-là, j'utilise... ce codepad.

Nouvel exemple

Il a l'avantage de pouvoir tester sur php 5.2, 5.3 et le trunk en cours

Par contre, oubliez les short tags...
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 17h20   #19
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Personnellement, j'ai mis mon codepad moi-même sur mon WAMP, si vous voulez jouer avec, il est PJ (wamp 2.0i).
Fichiers attachés
Type de fichier : php index.php (37,9 Ko, 3 affichages)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h46.


 
 
 
 
Partenaires

Hébergement Web