我创建一个$ values数组,然后将元素提取到本地范围。
$values['status'.$i] = $newStatus[$i];
extract($values);
当我渲染一个html页面时。我正在使用以下
<?php if(${'status'.$i} == 'OUT'){ ?>
但我对$ {正在做什么以及为何$ $状态感到困惑。$ i将无法解决
答案 0 :(得分:4)
$status.$i
表示
获取
$status
变量的值并将其与$i
变量的值连接。
${'status'.$i}
表示
获取
$i
变量的值,将id附加到'status'
字符串并获取变量值'status'.$i
示例:强>
$i
等于'2'
且$status
等于'someStatus'
:
$status.$i
评估为'someStatus' . '2'
,即'someStatus2'
${'status'.$i}
评估为${'status'.'2'}
$status2
。如果$status2
定义为变量 - 您将获得一些价值。
答案 1 :(得分:1)
我希望以建议的替代方式添加到已接受的答案中。
让我们假设以下内容,
$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;
:)