非法字符串偏移'选项1'

时间:2012-12-29 22:09:00

标签: arrays string php

这是我的初始代码:

    $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 个答案:

答案 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);
                                       ^