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.