Недопустимое смещение строки 'опция 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, пока форма не будет отправлена. Затем он показывает ошибку:

Предупреждение: недопустимое смещение строки 'опция 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>

2 ответа

Решение

Похоже, когда код запускает ошибку, либо $camp_price или же $total_cost это не массив, а строка.

Возможно, вы захотите напечатать значения этих переменных непосредственно перед точкой возникновения ошибки и найти места, где вы могли их непреднамеренно изменить.

Предупреждение: недопустимое смещение строки 'опция 1'

Эта ошибка означает, что вы используете смещение строки (здесь: 'option 1') что является незаконным. Смещение строки должно быть положительным числом, а не строкой.

Чаще всего это происходит, когда вы обращаетесь к строковой переменной, но думаете, что это массив: ( демонстрация)

<?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] потому что незаконное смещение 'option 1' используется как 0 затем. Следуя правилам PHP для доступа кДокументам в виде строковой подстроки, это первый символ:

string value
s
^---- character 0: substr($total_cost, 0, 1);
                                       ^
Другие вопросы по тегам