CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] (In/dé)crémentation dynamique

Ebara
Ebara
Niveau 16
16 mars 2017 à 23:13:35

Bien le bonsoir,

Je viens de tomber sur un problème légèrement insoluble même après recherches, si quelqu'un a une idée de comment faire ça de façon dynamique. (Mon code est fonctionnel mais ça me plaît pas)

En gros, je vous expose la situation, j'ai actuellement un code comme ça:


$toto = 'toto';
$counter = 0;
$char = un caractère random, osef, mais actuellement c'est un tab donc = chr(9);

foreach ($machin as $m) {
    if ($cond1) {
        $toto = str_repeat($char, $counter) . $toto;
    } elseif ($cond2) {
        $toto = str_repeat($char, $counter++) . $toto;
    } elseif ($cond3) {
        $toto = str_repeat($char, --$counter) . $toto;
    }
}

Ce qui est pas très propre, j'aime pas trop.

Ce que j'aimerais pouvoir faire, c'est déclarer dynamiquement une variable qui ferait le taff, comme si je faisais un truc du genre : $var = 'toto'; $toto = 'test'; echo $$toto , sauf qu'ici j'aimerais déclarer mon "++" ou mon "--" dynamiquement.

Le but serait donc d'avoir quelque chose comme:


foreach ($machin as $m) {
    if ($cond1) {
        $before = ''; $after = '';
    } elseif ($cond2) {
        $after = '++'; $before = '';
    } elseif ($cond3) {
        $before = '--'; $after = '';
    }

    $toto = str_repeat($char, $before$counter$after) . $toto;
}

En sachant que je ne peux PAS passer outre ma $cond1, ni ignorer $cond3, ni enlever les " . $toto " vu que ma variable $machin correspond à l'explode d'un string, où je concatène une chaîne de caractères en début de ligne à boucle.. pas la peine de me dire que c'est pas très PSR, j'ai vraiment pas le choix, c'est une problématique assez spécifique en l'occurence. Je me concentre juste sur ce problème d'incrément..

Après maintes recherches, je n'ai trouvé aucune solution qui correspondrait à mes besoins.. quelqu'un aurait une idée ?

Merci d'avance :p)

arsh222
arsh222
Niveau 10
17 mars 2017 à 09:49:26

eval() ? http://php.net/manual/fr/function.eval.php

$choix1 = "$counter";
$choix2 = "$counter++";
...
if($cond1)
  $toto = str_repeat($char,eval("return $choix1")).$toto;
...

ou alors des fonctions anonymes

$choix1 = function(&$counter){return $counter;};
$choix2 = function(&$counter){return $counter++;};
...
  $toto = str_repeat($char,$choix1)).$toto;

Mais le mieux c'est de réécrire ton programme en Lisp, ça c'est très PSR

Ebara
Ebara
Niveau 16
17 mars 2017 à 10:23:57

Lisp....... :hap: Va dire ça à mon boss !
J'avais pas du tout pensé au eval() ! Merci pour l'idée !

Les fonctions anonymes j'y ai pensé, mais je trouve ça un peu lourd surtout pour la relecture, et je suis pas fan des passages par référence.

LEpigeon-888
LEpigeon-888
Niveau 12
17 mars 2017 à 10:33:38
foreach ($machin as $m) {
    $newCounter = 0;
    if ($cond1) {
        $newCounter = $counter;
    } elseif ($cond2) {
        $newCounter = $counter++;
    } elseif ($cond3) {
        $newCounter = $counter--;
    }
    $toto = str_repeat($char, $newCounter) . $toto;
}

?

Message édité le 17 mars 2017 à 10:37:45 par LEpigeon-888
darkiron_natty
darkiron_natty
Niveau 8
18 mars 2017 à 20:32:07

Si tu nous expliquer le but du code exactement ?

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment