php数组语法$ {让我很困惑

时间:2016-10-13 20:27:17

标签: php html arrays

我创建一个$ values数组,然后将元素提取到本地范围。

 $values['status'.$i] = $newStatus[$i];
 extract($values);

当我渲染一个html页面时。我正在使用以下

 <?php if(${'status'.$i} == 'OUT'){ ?>

但我对$ {正在做什么以及为何$ $状态感到困惑。$ i将无法解决

2 个答案:

答案 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
}

另一种解决方案PLUS

您甚至可能发现可以以不同方式准备状态数组。我假设您正在使用某种循环?如果是这样,这些都是等价的,

for ($i=0; $i<count($newStatus); $i++){
    $values['status'][$i] = $newStatus[$i];
}

$values['status'] = $newStatus;

:)