【问题标题】:Illegal string offset 'option 1' [closed]非法字符串偏移“选项 1”[关闭]
【发布时间】:2012-12-29 22:09:00
【问题描述】:

这是我的初始代码:

    $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>

【问题讨论】:

  • var_dump($total_cost); 并将其添加到您的问题中。错误信息告诉你一个行号。该行的代码最有趣,其余的(非常)没有帮助。
  • 感谢 hakre,我在将 $total_cost 更改为字符串的行代码下方发布了...希望您能帮助我找出原因。再次感谢

标签: arrays string php


【解决方案1】:

看起来,当触发错误的代码运行时,$camp_price$total_cost 不是数组而是字符串。

您可能希望在错误发生点之前打印这些变量的值,并查找您可能无意中更改了它们的任何地方。

【讨论】:

  • 或者,更有可能是$total_cost
  • 感谢您的回复...按照您告诉我的操作,我确定了将变量 $total_cost 更改为字符串的代码:
  • else if (empty ($errors)===false){ print_r($total_cost); foreach ($_POST as $key=&gt;$value) { $$key = isset($value) ? $value : ''; } print_r($total_cost); echo output_errors($errors); }
  • 它打印返回第一个 print_r 的数组和第二个的字符串...但我不明白为什么 foreach 将 $total_cost 变量更改为字符串!再次感谢,我希望你能帮我解决这个问题。
  • $_POST 是否包含名为total_cost 的键?如果是,$$key = ... 行会将$total_cost 设置为相应的值。 (顺便说一句,这样做通常是个坏主意;reason 为什么不推荐使用 register_globalsimport_request_variables()。)
【解决方案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],因为非法偏移量'option 1' 被用作0。按照PHP's string substring accessDocs的规则,这是第一个字符:

string value
s
^---- character 0: substr($total_cost, 0, 1);
                                       ^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2020-11-29
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多