【发布时间】:2020-04-15 20:50:17
【问题描述】:
在${str_replace(' ', '_', $group_name)} 中使用大括号{ } 是否有效,以调用可变变量?
$group_name 本身应该由foreach loop 提供,但是因为许多组名都带有空格(例如LICENSE INFORMATION 是两个单词之间有一个空格并且可能是非法变量名) - 因此我'必须包含str_replace 才能用下划线替换空格。所有这些最终都发生在大括号 { ... } 内,我希望这将使 PHP 能够正确解析它。
<?php
...
foreach ($grouped as $IMSKU){
$all_grouped_blocks = [];
foreach ($IMSKU['Group_Name'] as $group_name_index => $group_name){
if (!isset(${str_replace(' ', '_', $group_name)})){
${str_replace(' ', '_', $group_name)} = [];
${str_replace(' ', '_', $group_name)} = '<th colspan="3">'."$group_name".'</th>';
array_push($all_grouped_blocks,${str_replace(' ', '_', $group_name)});
}
}
}
【问题讨论】:
-
那么,它奏效了吗?就个人而言,由于您多次使用该约定,我会做类似
$key = str_replace( ... )然后参考$$key -
@TimMorton 因为我必须立即运行
!isset测试,我担心以任何方式预先设置变量会混淆测试? -
这是单元测试(和 TDD)非常有用的地方,但我离题了。在我的脑海中,在我看来,
$key总是会被设置;不过,您仍然需要检查isset($$key)。