PHP非法字符串偏移错误

I have this code I don't know why I get error from it.

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

This is so weird cause I have checked var_dump($$repeatType) output, it seems fine:

array(3){["two_years"]=>int(730)["offset_const"]=>int(1)["add_unite"]=>string(4)"days"}

This is a syntax limitation. PHP is trying to bind the array-index operator to $repeatType (which is a string) and an associative key is invalid in a string, thus causing your problem.

You need to explicitly specify where your variable starts and begins like this:

for ($i=0; $i < ${$repeatType}['two_years']; $i++) {}

A workaround is to assign it to a temporary variable like this:

$selectedRepeatType = $$repeatType;
for ($i=0; $i < $selectedRepeatType['two_years']; $i++) {}

I can understand what you want ,but this expression $$repeatType['two_years'] is ambiguous , at least for me it takes me some time to run the code to find out what the output,so first of all I should suggest you don't use such a expression.

OK,come back to the question,you expected $$repeatType['two_years'] to return one of the number 26,52*2,and 365*2.But let us run the code.

$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)

OK ,we know what happend, and you can find why here.

From your code, i can understand that you haven't set a value for $repeatType['two_years']. First assign a value

$repeatType['two_years'] = "monthly";

Now "$monthly" is an array so you call:

for ($i=0; $i < ${$repeatType['two_years']}['two_years']; $i ++){
    //Loop 26 times.
}

$repeatType['two_years'] need to be defined or it will give a PHP error.