Как объединить имя переменной PHP?

У меня есть цикл PHP for:

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

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

}

Чего я пытаюсь добиться, так это использовать переменную цикла for и добавить ее к имени другой переменной.

По сути, я хочу, чтобы вывод PHP для каждой строки был следующим:

1
$check1="some value"

2
$check2="some value"

3
$check3="some value"

4
$check4="some value"

etc etc 

Я пробовал $check.$counter="some value", но это не помогло.

Как я могу этого добиться? Я упускаю что-то очевидное?


person Smudger    schedule 31.07.2012    source источник
comment
Будет ли использование array предпочтительнее этого метода? $myVar = array(); for($i = 0; $i <= 67; $i++) { $myVar[] = "Some Value"; }   -  person Matt    schedule 31.07.2012


Ответы (4)


Правильный синтаксис для переменных переменных:

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

Однако я крайне не одобряю это. То, что вы пытаетесь достичь, скорее всего, можно решить более элегантно, используя массивы. Пример использования:

// 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;
}
person Tim Cooper    schedule 31.07.2012
comment
Спасибо, Тим, есть ли ситуация, когда это приемлемо, или эта функциональность больше не используется? - person Smudger; 31.07.2012
comment
@Smudger: Навскидку, я не могу придумать надежного случая, когда можно было бы использовать переменные переменные. Глядя на комментарии на странице документации, вы можете получить некоторые идеи о том, где они могут быть полезны. Просто имейте в виду, что то, что вы там читаете, может не считаться лучшей практикой. - person Tim Cooper; 31.07.2012
comment
Конкатенация никогда не является более чистым решением, но могут быть случаи, когда у вас есть старый, хорошо разработанный код, который никогда не предназначался для корреляции A + B, где просто намного проще сделать это, чем переписывать сотни строк кода только для замены старой переменной. типы с массивами - person Nosajimiki; 14.07.2017
comment
Единственный случай, когда я могу их использовать, — это HTML-формы, где у меня есть рекурсивно построенные входные данные. Когда вы опубликуете его, он будет опубликован как набор переменных, а не как массив; поэтому рекурсивный вызов их может быть проще с помощью $_POST[${myInputName.$i}] - person Nosajimiki; 14.07.2017

Вы должны использовать синтаксис ${'varname'}:

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

это будет работать, но почему бы просто не использовать массив?

$check[$counter] = "some value";
person Adunahay    schedule 31.07.2012

Это можно использовать в некоторых случаях. Например, если в вашем приложении есть что-то вроде двух языковых записей в БД.

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

Это гораздо удобнее, чем, например, это;

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

Очевидно, это то, чего вам не следует делать в многоязычном приложении, но я видел подобные случаи.

person arma    schedule 09.07.2013
comment
Да, это мой случай: у меня есть 3 записи столбца в БД. Так что мне нужно зациклить так из группы флажков - person Pathros; 22.09.2018

Массив сделает это.

$check = array();

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