Page 1 sur 1

comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 11:42
par amiens80
bonjour,


j'ai de longues expressions à écrire en manipulant plusieurs variables qui commence par un même nom.
par exemple $cas1 $cas2 $cas3 ... jusqu'à $cas50

au lieu de faire $test_des_cas= $cas1 && $cas2 && cas3 && $cas4 &&...$cas50 ;
je voudrais le faire en une seule ligne ou une seule expression.


y-a-t-il une écriture ou une syntaxe php qui me permettre de dire "fait un && avec toutes les variables qui commencent par le schéma $cas " ?

autre exemple : si je veux faire la somme de toutes les variables qui commencent par $cas , comment faire ?
à part $cas1 + $cas2 + ...$cas 50

Je ne peux pas mettre mes 50 variables dans un tableau ni objet car elles sont formées d'expressions différentes. Le seul point commun c'est le début de nomenclature (c-a-d qu'elles commencent toutes par un même nom).

voilà, j'espère qu'il y a une solution car dans l'éditeur et pour la lecture du code, c'est très lourd à écrire.

merci de votre conseil.

Re: comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 12:44
par Saian
Salut amiens80, la comme ça sans trop réfléchir ce qui me vient c'est, un tableau ^^ (je vois pas vraiment le problème), combiné à la fonction eval.
$cases = [];
for ($i = 1; $i <= 50; $i++) {
    // this line to initialize variables for the test
    ${'cas' . $i} = $i;

    $cases[] = '$cas' . $i;
}

$test_des_cas = eval('return ' . implode(' && ', $cases) . ';');
var_dump($test_des_cas);

$sum = eval('return ' . implode(' + ', $cases) . ';');
var_dump($sum);

Re: comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 13:01
par amiens80
merci pour la réponse.
en lisant ton code je vois une chose intéressante dans la 1ere partie (le for) !

est-ce que ça fait bien ça : prendre la variable qui commence par 'cas' et un nombre en itération et la met dans un tableau ? si oui, je ne savais pas qu'on pouvait parcourir l'ensemble des variables de la mémoire sans connaître le nom complet ! je vais tenter... merci bcp.

Re: comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 13:08
par Saian
Pour le for le ${'cas' . $i} = $i; permet d'initialiser les variables $cas1 à $cas50 avec pour valeur 1 à 50 et le $cases[] = '$cas' . $i; permet de stocker dans le tableau les noms des variables (sous forme de chaine : '$cas1', '$cas2' etc).
Ensuite le eval permet d'évaluer la ligne de code return $cas1 && $cas2 etc créée avec concaténation de chaines et jointure des noms des variables avec le symbole && puis avec le + pour le deuxième eval.

PS : tu peux écrire des choses comme ça en php :
$mavar = 'hello';
$var = 'mavar';
echo $$var; // output hello
https://www.php.net/manual/fr/language. ... riable.php

Re: comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 14:52
par amiens80
je vais tenter ! merci !

On vient aussi de m'apprendre l'existence de get_defined_vars avec quoi on peut looper (parcourir) l'ensemble des variables en mémoire et de les redireiger dans un tableau suivant le nom qu'elle ont. En suite , je ferai ce que je veux du tableau ou les traiter au cas par cas.
Du coup, ça raison mon souci de 2 façons !
exemple :

Code : Tout sélectionner

$toto_one = 1; $toto_two = 2; $vars = get_defined_vars(); $sum = 0; foreach($vars as $name => $var) { if (str_starts_with($name, 'toto')) { $sum += $var; } } echo $sum;

Re: comment traiter en même temps plusieurs variables ayant un début de nomenclature identique ?

Posté : 17 mars 2023, 16:06
par Saian
Une troisième méthode pour la somme sur la base du get_defined_vars et du str_starts_with avec array_filter et array_sum ^^
echo $sum = array_sum(array_filter(get_defined_vars(), static function ($name) { 
    return str_starts_with($name, 'cas'); 
}, ARRAY_FILTER_USE_KEY));