这是我的初始代码:
$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>
答案 0 :(得分:3)
看起来,当触发错误的代码运行时,$camp_price
或$total_cost
不是数组而是字符串。
您可能希望在发生错误的位置之前打印这些变量的值,并查找可能无意中更改它们的任何位置。
答案 1 :(得分:1)
警告:非法字符串偏移'选项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]
,因为非法偏移'option 1'
用作0
。遵循PHP's string substring accessDocs的规则,这是第一个字符:
string value
s
^---- character 0: substr($total_cost, 0, 1);
^