我有这段代码,我不知道为什么会收到错误。
if( ! in_array($repeatType, ['monthly', 'weekly', 'daily'])){
// do somehting
}
$monthly = ['two_years' => 26, 'offset_const' => 4, 'add_unite' => 'weeks'];
$weekly = ['two_years' => 52*2, 'offset_const' => 1, 'add_unite' => 'weeks'];
$daily = array('two_years' => 365*2, 'offset_const' => 1, 'add_unite' => 'days');
for ($i=0; $i < $$repeatType['two_years']; $i++) { #<--- here I get the error
// ..... // rest of the code
这是如此奇怪,因为我检查了var_dump($$repeatType)
输出,看起来很好:
array(3){["two_years"]=>int(730)["offset_const"]=>int(1)["add_unite"]=>string(4)"days"}
答案 0 :(得分:6)
这是语法限制。 PHP正在尝试将数组索引运算符绑定到$ repeatType(这是一个字符串),并且关联键在字符串中无效,从而导致您的问题。
您需要明确指定变量的开始和开始位置,如下所示:
for ($i=0; $i < ${$repeatType}['two_years']; $i++) {}
解决方法是将其分配给这样的临时变量:
$selectedRepeatType = $$repeatType;
for ($i=0; $i < $selectedRepeatType['two_years']; $i++) {}
答案 1 :(得分:0)
我可以理解你想要什么,但是这个表达式$$ repeatType [&#39; two_years&#39;]是不明确的,至少对我来说,运行代码需要一些时间来找出输出是什么,所以首先,我建议你不要使用这样的表达方式。
好的,回到问题,你期望$$repeatType['two_years']
返回26,52 * 2和365 * 2中的一个。但是让我们运行代码。
$name='a';
$a=array('n'=>1);
$a=array('n'=>2);
$a=array('n'=>3);
var_dump($$name['n']); //array(1) { ["n"]=> int(3) }
var_dump($$name); //array(1) { ["n"]=> int(3) }
var_dump(${$name}['n']);//int(3)
好的,我们知道发生了什么,你可以找到原因here。
答案 2 :(得分:0)
从您的代码中,我可以理解您没有为$ repeatType ['two_years']设置值。首先分配一个值
$repeatType['two_years'] = "monthly";
现在“$ monthly”是一个数组,所以你打电话:
for ($i=0; $i < ${$repeatType['two_years']}['two_years']; $i ++){
//Loop 26 times.
}
$ repeatType ['two_years']需要定义,否则会产生PHP错误。