Недопустимое смещение строки 'option 1'
Вот мой исходный код:
$camp_price=array(
'option 1' => array(
'id' => 'June 30 to July 20',
'weeks' => 3,
'week_price' => 995),
'option 2' => array(
'id' => 'June 30 to July 13',
'weeks'=> 2,
'week_price' => 995)
);
foreach ($camp_price as $name=>$values) {
$total_cost[$name]=$values['weeks'] * $values['week_price'];
}
Вот код HTML. Он отлично передает значение $total_cost, пока форма не будет отправлена. Затем он показывает ошибку:
Предупреждение: недопустимое смещение строки 'option 1'
Что я не понимаю:
<select name="preferred_session">
<option value="option 1" <?php if($preferred_session =='option 1') echo'selected="selected"'; ?>>
<?php echo $camp_price['option 1']['id'],': ', $total_cost['option 1']; ?>euros
</option>
<option value="2" <?php if($preferred_session =='option 2') echo 'selected="selected"'; ?>>
<?php echo $camp_price['option 2']['id'],': ', $total_cost['option 2']; ?>euros
</option>
</select>
Ответы
Ответ 1
Похоже, когда код запускает ошибку, либо $camp_price
, либо $total_cost
не является массивом, а строкой.
Вы можете распечатать значения этих переменных непосредственно перед точкой, где происходит ошибка, и искать любые места, где вы могли бы непреднамеренно их изменить.
Ответ 2
Предупреждение: недопустимое смещение строки 'option 1'
Эта ошибка означает, что вы используете смещение строки (здесь: 'option 1'
), что является незаконным. Смещения строк должны быть положительным числом, а не строкой.
Это чаще всего происходит при доступе к строковой переменной, но вы думаете, что это массив: (Demo)
<?php
$total_cost = 'string value';
echo $total_cost['option 1'];
Дает ошибку (и выводит):
Warning: Illegal string offset 'option 1' in /demo.php on line 5
s
s
в конце - $total_cost[0]
, потому что в качестве 0
используется незаконное смещение 'option 1'
. Следуя правилам PHP string substring access Docs, это первый символ:
string value
s
^---- character 0: substr($total_cost, 0, 1);
^