#php
#php
Вопрос:
я определил пару переменных: $day_0, $ day_1 … $ day_8 и мне нужно создать строку с переменной days, встроенной в строку, вот что я сделал;
for($i = 0; $i <=8; $i ) {
$d = 'day_'.$i;
$day = eval($($d));echo $day;
$cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space;
}
но php всегда жаловался
syntax error, unexpected '(', expecting T_VARIABLE or '$'
что с ней не так? Спасибо.
Комментарии:
1. вместо определения именованных переменных вам следует определить один массив для хранения их всех. Затем вы можете довольно легко перебирать содержимое массива. eval обычно не следует использовать, за исключением нескольких редких случаев.
2. $day = array(); $day[0] = ‘бла’; $day[1] = ‘бла’; foreach($day как $value) {}
3. Такое использование eval указывает на то, что вы пропустили этот важный раздел в руководстве по PHP: php.net/manual/en/language.types.array.php
4. Три ответа, два из которых одобрены, все предполагают тонко завуалированный restricted
eval
-nephew, которые являются переменными переменными, вместо того, чтобы использовать очевидное, более простое и приемлемое решение для массива. И вы удивляетесь, почему у PHP плохая репутация?
Ответ №1:
Нет необходимости использовать eval
:
for($i = 0; $i <=8; $i ) {
$day = ${'day_' . $i};
echo $day;
$cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space;
}
Смотрите Документацию по PHP для получения дополнительной информации о переменных переменных.
Ответ №2:
Более безопасным и простым решением было бы использовать:
$d = 'day_'.$i;
$day = $$d;
Ответ №3:
Почему бы просто не использовать $$
?
for($i = 0; $i <=8; $i ) {
$d = 'day_'.$i;
$day = $$d; //this will point to $day_0 ...
echo $day;
$cmd_line .= 'INPUT'.$i.'='.$quote.$day.$quote.$space;
}
Ответ №4:
Я не предлагаю, eval()
но если вы хотите ее использовать, передайте действительный php-код в качестве eval()
параметра (строки).
Пример:
$d = 'day_1';
$phpcode = "${$d}='something';";
$day = eval($phpcode);
echo $day_1;
При этом будет выведена строка, something
присвоенная новой переменной $day_1
.
Не забудьте добавить ;
в и каждой строки, которую вы хотите оценить с помощью eval()
функции.
Лучшим решением был бы массив.