有很多关于"非法字符串偏移"的帖子,但我没有找到任何解决方案。也许有人看了我的代码:
function neue($pv){ <== LINE 365
echo "<pre>";
print_r($pv);
echo "</pre>";
if (is_array($pv)){
echo "IS ARRAY";
}
if (strlen($pv["Speichern"])>0){ <== LINE 372
save();
}
}
这只是一个片段,但它显示了相关的部分。$pv是一个数组,print_r的输出为:
Array (
[bez] => Test
[gruppe] => 0
[MoAnf] => 11:00
[MoEnd] => 12:00
[Speichern] => Speichern
[PHPSESSID] => d356016bf4c5c5b5758f526ba4e4108e
[setid] =>
)
我检查它是否是arry,输出是:
是阵列
那么为什么这条线:
if (strlen($pv["Speichern"])>0){
投掷:
警告:中的字符串偏移量"Speichern"非法/webseiten/save.php在线372
编辑:
这是372行:
if (strlen($pv["Speichern"])>0){
我之前已经打印出了数组$pv,并检查了它是一个数组。函数调用和错误行之间没有其他行。我已经张贴了所有的代码行。
编辑:
var_dump($pv["Speichern"])的结果;是:
string(9)"Speichern"
编辑发现的问题:
我发现了问题。未设置变量setid。
[setid] =>
如果我将代码更改为:
function neue($pv){
echo "<pre>";
print_r($pv);
echo "</pre>";
if (is_array($pv)){
echo "IS ARRAY";
}
$pv["setid"] = "foobar";
if (strlen($pv["Speichern"])>0){
save();
}
}
代码运行时没有任何异常。但我不知道为什么这会导致"Speichern"出现错误。也许是PHP中的一个错误?
foreach构造提供了一种简单的方法来迭代数组。foreach只适用于数组和对象,当您尝试在具有不同数据类型或未初始化变量的变量上使用它时,它会发出错误。有两种语法:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
试试这个。
function neue($pv){ //<== LINE 365
echo "<pre>";
print_r($pv);
echo "</pre>";
if (is_array($pv)){
echo "IS ARRAY";
}
foreach($pv as $pv){
if (strlen($pv["Speichern"])>0){ //<== LINE 372
save();
}
}
}