web-dev-qa-db-fra.com

Comment concaténer PHP nom de variable?

J'ai un PHP pour la boucle:

for ($counter=0,$counter<=67,$counter++){

echo $counter;
$check="some value";

}

Ce que j'essaie de réaliser, c'est d'utiliser la variable de boucle for et de l'ajouter au nom d'une autre variable.

Fondamentalement, je veux que la sortie PHP soit la suivante pour chaque ligne

1
$check1="some value"

2
$check2="some value"

3
$check3="some value"

4
$check4="some value"

etc etc 

J'ai essayé $check.$counter="some value" mais cela échoue.

Comment puis-je atteindre cet objectif? Suis-je en train de manquer quelque chose d'évident?

17
Smudger

La syntaxe appropriée pour variables variables est:

${"check" . $counter} = "some value";

Cependant, je décourage fortement cela. Ce que vous essayez d'accomplir peut très probablement être résolu plus élégamment en utilisant tableaux . Exemple d'utilisation:

// Setting values
$check = array();
for ($counter = 0; $counter <= 67; $counter++){
    echo $counter;
    $check[] = "some value";
}

// Iterating through the values
foreach($check as $value) {
    echo $value;
}
57
Tim Cooper

Ceci est utilisable dans certains cas. Par exemple, si votre application a quelque chose comme 2 entrées de langue dans DB.

echo $this->{'article_title_'.$language};

C'est beaucoup plus utilisable que par exemple ceci;

if($language == 'mylanguage1')
    echo $this->article_title_mylanguage1;
else
    echo $this->article_title_mylanguage2;

Évidemment, c'est ce que vous ne devriez pas avoir à faire dans votre application multilingue, mais j'ai vu des cas comme celui-ci.

5
arma

Vous devez utiliser la syntaxe $ {'varname'}:

for ($counter=0,$counter<=67,$counter++){
    echo $counter;
    ${'check' . $counter} ="some value";
}

cela fonctionnera, mais pourquoi ne pas simplement utiliser un tableau?

$check[$counter] = "some value";
5
Adunahay

Un tableau accomplirait cela.

$check = array();

for($counter = 0; $counter <= 67; $counter++) {
    $check[] = "some value";
    var_dump($check[$counter]);
}
0
Matt