JeuWeb - Crée ton jeu par navigateur
[PHP] Fusion d'un tableau par addition - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Fusion d'un tableau par addition (/showthread.php?tid=2142)

Pages : 1 2 3 4 5 6


RE: php array fusion et addition - Argorate - 17-03-2011

Je n'ai pas compris niahoo, il est où le problème avec les commentaires?


RE: php array fusion et addition - php_addict - 17-03-2011

merci pour vos bouts de code, le mien est si mauvais que ca? comme je bosse en solo je ne suis quasiment jamais confronté à d'autres codes que le mien...


RE: php array fusion et addition - Sephi-Chan - 17-03-2011

Le problème de ton bout de code, c'est qu'on ne voit pas où tu veux en venir. Tu "perds" le développeur dans des tests inutiles.


function array_fusion_and_add($array1, $array2){
$result = array();

if(count($array1) > 0){
$result = $array1;
if(count($array2) > 0){
foreach($array2 as $key => $t){
if(isset($result[$key])) $result[$key] += $t;
else $result[$key] = $t;
}
}
}

return($result);
}

Quand tu écris une fonction, essaye d'afficher ton intention. Regarde celle-ci :


function array_melt(){
$result = array();

foreach(func_get_args() as $array){
foreach($array as $attribute => $value){
$result[$attribute] += $value;
}
}

return $result;
}

Ici, on entre tout de suite dans le vif du sujet. On initialise un tableau de résultat, puis on parcourt chaque tableau d'attributs transmis (force de cette fonction : tu peux lui donner autant de tableaux que tu veux), puis on ajoute l'attribut au tableau, en augmentant sa valeur si l'attribut est déjà présent.


Sephi-Chan


RE: php array fusion et addition - php_addict - 17-03-2011

ok je comprends mais il faut tester si la variables est initialisée avant d'ajouter une valeur...


RE: php array fusion et addition - Sephi-Chan - 17-03-2011

Même pas besoin, on est en PHP on s'en fout de faire proprement ! Même pas besoin de déclarer $result ! Big Grin


Sephi-Chan


RE: php array fusion et addition - php_addict - 17-03-2011

et non pas tout à fait:


$array1 = array('nb_cerises' => 2, 'nb_bananes ' => 3, 'nb_poires' => 5);
$array2 = array('nb_cerises' => 100 , 'nb_choux' => 20);

$result=array_melt($array1,$array2);

ca donne une erreur:

Notice: Undefined index: nb_cerises


RE: php array fusion et addition - Sephi-Chan - 17-03-2011

C'est pas une erreur c'est une notice ! Explique lui Argorate. :p

Plus sérieusement, ça fonctionne quand même, mais si tu veux une version propre de la fonction :


function array_melt(){
$result = array();

foreach(func_get_args() as $array){
foreach($array as $attribute => $value){
if(array_key_exists($attribute, $result)) $result[$attribute] += $value;
else $result[$attribute] = $value;
}
}

return $result;
}


Sephi-Chan


RE: php array fusion et addition - php_addict - 17-03-2011

ok..oulala je suis fatigué. faut que je débranche l'ordi...


RE: [PHP] Fusion d'un tableau par addition - Argorate - 17-03-2011

Une notice, c'est un avertissement qui sert a expliciter un cas qu'il traite de manière implicite, pas une erreur Smile
Ici, il te dit, j'ai pas trouver l'indice dont tu me parles, donc je le crée mais je t'avertis que je le crée sans que tu me l'ai explicitement demandé.

Sinon, tu peux rajouter un petit if comme te le montre Sephi si tu y tiens Wink


RE: [PHP] Fusion d'un tableau par addition - Sephi-Chan - 18-03-2011

Voilà, c'était l'interprétation tout personnelle d'Argorate.
Maintenant voici la version de la documentation.

Citation :Activer le rapport d'erreur de niveau E_NOTICE durant le développement a des avantages. En terme de déboguage, les message d'alertes vous signalent des bogues potentiels dans votre code. Par exemple, l'utilisation de valeurs non initialisées est signalée. Il est aussi plus pratique pour trouver des coquilles, et, ainsi, gagner du temps. Les messages NOTICE vous signaleront aussi les mauvaises pratiques de codage. Par exemple $arr[item] doit toujours être écrit $arr['item'] car PHP va considérer "item" comme une constante, au premier abord. Si cette constante n'est pas définie, alors il va l'utiliser comme une chaîne.

Voilà, voilà. Mais je pense que tu as raison de vouloir faire du code bulletproof, PHP Addict. Ça ne coûte pas plus cher et ça évite d'écrire comme un goret.


Sephi-Chan