#php #html #arrays
#php #HTML #массивы
Вопрос:
Я создаю массив $values, а затем извлекаю элементы в локальную область.
$values['status'.$i] = $newStatus[$i];
extract($values);
Когда я визуализирую HTML-страницу. Я использую следующее
<?php if(${'status'.$i} == 'OUT'){ ?>
но я смущен тем, что делает $ { и почему $status .$я не разрешу
Комментарии:
1. Это «переменная переменная»
Ответ №1:
$status.$i
означает
возьмите значение
$status
переменной и объедините его со значением$i
переменной.
${'status'.$i}
означает
примите значение
$i
переменной, добавьте идентификатор в'status'
строку и примите значение переменной'status'.$i
Пример:
С $i
равными '2'
и $status
равными 'someStatus'
:
$status.$i
вычисляется до'someStatus' . '2'
, что'someStatus2'
${'status'.$i}
вычисляется, к${'status'.'2'}
которому относится$status2
. И если$status2
определена переменная — вы получите некоторое значение.
Ответ №2:
Я хотел добавить к принятому ответу предложенный альтернативный способ достижения вашей цели.
Повторное повторение принятого ответа…
Давайте предположим следующее,
$status1 = 'A status';
$status = 'foo';
$i = 1;
$var_name = 'status1';
и затем,
echo $status1; // A status
echo $status.$i; // foo1
echo ${'status'.$i}; // A status
echo ${"status$i"}; // A status
echo ${$var_name}; // A status
Сначала разрешается строка внутри фигурных скобок, что фактически приводит к ${'status1'}
тому, что она такая же, как $status1
. Это переменная переменная.
Читайте о переменных переменных — http://php.net/manual/en/language.variables.variable.php
Альтернативное решение
Многомерные массивы, вероятно, являются более простым способом управления вашими данными.
Например, вместо чего-то вроде
$values['status'.$i] = $newStatus[$i];
как насчет
$values['status'][$i] = $newStatus[$i];
Теперь мы можем использовать такие данные, как,
extract($values);
if($status[$i] == 'OUT'){
// do stuff
}
Альтернативное решение ПЛЮС
Возможно, вы даже обнаружите, что можете подготовить свой массив состояния по-другому. Я предполагаю, что вы используете какой-то цикл? Если это так, то оба они эквивалентны,
for ($i=0; $i<count($newStatus); $i ){
$values['status'][$i] = $newStatus[$i];
}
и,
$values['status'] = $newStatus;
🙂